2009-02-26 29 views
23

Mogę pobrać dane do mojego TabControl, ale nagłówki mają wokół nich ramki i nie mogę ich zrzucić na zakładkę.Jak powiązać kolekcję List z nagłówkami TabControl w WPF?

Co robię źle z składni powiązania XAML na tym TabControl?

XAML:

kod
<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> 

za:

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 lucky ur użyciu WPF ... Mam similiar problem z Silverlight, ponieważ nie obsługują konwerter ItemSource dla tabcontrol. –

+0

Zobacz odpowiedź Christof (http://stackoverflow.com/questions/589802/how-can-i-bind-a-collection-to-tabcontrol-headers-in-wpf/3196668#3196668), aby XAML zrobił ta praca - potrzebny jest blok TabControl.ContentTemplate dla zawartości, ponieważ TabControl.ItemTemplate jest TYLKO dla części nagłówkowej zakładki. –

Odpowiedz

6

prostu związać swoją listę do TabControl jako ItemsSource, na przykład

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

da to kartę dla każdego obiektu w kliencie.

+2

Dzięki, że dostałem mnie dalej, ale teraz nie mogę kliknąć z zakładki na kartę, a teksty nagłówków mają ramki wokół nich. Wysłałem nowy kod powyżej, co trzeba zmienić, aby móc powiązać dane z nagłówkiem i zawartością kart? –

+1

To jest mój problem - wszystko działa oprócz tego, że nie można wybrać zakładek klikając na tekst nagłówka, co sprawia, że ​​tabcontrol jest prawie bezużyteczny. – LineloDude

46

Tutaj ist co bym zrobił

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; } 
} 

A na stronie 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

TO rzeczywiście działa. :) –

+6

Ah !, 'ContentTemplate'. Dzięki! –

Powiązane problemy