wpf data-binding tabcontrol

¿Cómo puedo vincular una colección de listas a los encabezados de TabControl en WPF?



data-binding (4)

Puedo obtener datos en mi TabControl pero los encabezados tienen marcos a su alrededor y no puedo deslizarme de una pestaña a otra.

¿Qué estoy haciendo mal con la sintaxis de enlace XAML en este TabControl?

XAML:

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

código detrás:

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



Esto es lo que haría

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

Y en el lado 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>



simplemente une tu Lista a tu TabControl como ItemsSource, por ejemplo

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

esto le dará una pestaña para cada objeto en el cliente.