2009-02-26 5 views
23

Posso ottenere dati nel mio TabControl, ma le intestazioni hanno dei frame attorno a loro e non riesco a filtrare da una scheda all'altra.Come posso associare una raccolta di elenchi alle intestazioni di TabControl in WPF?

Cosa sto facendo male con la sintassi dell'associazione XAML su questo TabControl?

XAML:

codice
<StackPanel> 
    <TabControl x:Name="TheTabControl"> 
     <TabControl.ItemTemplate> 
      <DataTemplate> 
       <TabItem Header="{Binding LastName}"> 
        <StackPanel Margin="10" Orientation="Horizontal"> 
         <TextBlock Text="{Binding FirstName}"/> 
         <TextBlock Text=" "/> 
         <TextBlock Text="{Binding LastName}"/> 
        </StackPanel> 
       </TabItem> 
      </DataTemplate>     
     </TabControl.ItemTemplate> 
    </TabControl> 

    <TabControl> 
     <TabItem Header="Tab1"> 
      <TextBlock Text="This is a test of tab 1"/> 
     </TabItem> 
     <TabItem Header="Tab2"> 
      <TextBlock Text="This is a test of tab 2"/> 
     </TabItem> 
    </TabControl> 

</StackPanel> 

dietro:

public partial class Window1 : Window 
{ 
    public Window1() 
    { 
     InitializeComponent(); 

     //create all 
     List<Customer> customers = new List<Customer>(); 
     customers.Add(new Customer { FirstName = "Jim", LastName = "Smith", NumberOfContracts = 23 }); 
     customers.Add(new Customer { FirstName = "Jane", LastName = "Smith", NumberOfContracts = 23 }); 
     customers.Add(new Customer { FirstName = "John", LastName = "Tester", NumberOfContracts = 23 }); 

     //show 
     TheListBox.ItemsSource = customers; 

    } 
} 

public class Customer 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public int NumberOfContracts { get; set; } 
} 
+0

u fortunato ur utilizzando WPF ... ho problema simile con Silverlight, perché non supportano un convertitore ItemSource per tabcontrol. –

+0

Vedere la risposta di Christof (http://stackoverflow.com/questions/589802/how-can-i-bind-a-list-collection-to-tabcontrol-headers-in-wpf/3196668#3196668) per XAML questo lavoro: è necessario un blocco TabControl.ContentTemplate per il contenuto poiché TabControl.ItemTemplate è SOLO per la parte dell'intestazione della scheda. –

risposta

6

solo vincolare il proprio elenco al TabControl come ItemsSource, per esempio

<TabControl ItemsSource="{Binding Customers}"/> 

questo vi darà una scheda per ogni oggetto nel cliente.

+2

Grazie, questo mi ha aiutato, ma ora non riesco a cliccare da una scheda all'altra ei testi delle intestazioni hanno dei frame attorno a loro. Ho pubblicato il nuovo codice sopra, cosa deve essere modificato in modo da poter collegare i dati nell'intestazione e il contenuto delle schede? –

+1

Questo è il mio problema: tutto funziona eccetto che non è possibile selezionare le schede facendo clic sul testo dell'intestazione, il che rende quasi inutile il controllo delle schede. – LineloDude

46

Qui ist cosa farei

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
    } 

    private void Window_Loaded(object sender, RoutedEventArgs e) 
    { 
     //create all 
     var customers = new List<Customer>{ 
      new Customer {FirstName = "Jim", LastName = "Smith", NumberOfContracts = 23}, 
      new Customer {FirstName = "Jane", LastName = "Smith", NumberOfContracts = 23}, 
      new Customer {FirstName = "John", LastName = "Tester", NumberOfContracts = 23}}; 

     //show 
     TheTabControl.ItemsSource = customers; 
     TheTabControl.SelectedIndex = 0; 
    } 


public class Customer 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public int NumberOfContracts { get; set; } 
} 

E sul lato XAML

<TabControl x:Name="TheTabControl">    
    <TabControl.ItemTemplate> 
     <DataTemplate>      
      <TextBlock>        
       <TextBlock Text="{Binding FirstName}"/> <TextBlock Text="{Binding LastName}"/> 
      </TextBlock>       
     </DataTemplate> 
    </TabControl.ItemTemplate> 
    <TabControl.ContentTemplate> 
     <DataTemplate> 
      <TextBlock>        
       This is <TextBlock Text="{Binding FirstName}"/> <TextBlock Text="{Binding LastName}"/> 
      </TextBlock> 
     </DataTemplate> 
    </TabControl.ContentTemplate> 
</TabControl> 
+0

QUESTO funziona davvero. :) –

+6

Ah !, 'ContentTemplate'. Grazie! –

Problemi correlati