How to associate a List collection with TabControl headers in WPF?

I can get the data into my TabControl, but the headers have frames around them, and I cannot mark a tab on a tab.

What am I doing wrong with the XAML binding syntax on this 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> 

code behind:

 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; } } 
+22
data-binding wpf tabcontrol
Feb 26 '09 at 9:26
source share
4 answers

just bind your list to the TabControl element as ItemsSource, for example.

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

this will give you a tab for each object in the client.

+6
Feb 26 '09 at 9:33
source share

Here is what i will do

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

And on the XAML side

 <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> 
+46
Jul 07 2018-10-10T00:
source share

Your answer can be found here.

http://www.codeplex.com/smartclient/Thread/View.aspx?ThreadId=31821

Notice how it sets the ContentTemplate as well as the ItemTemplate ... you almost got it!

+5
Feb 26 '09 at 14:37
source share
+3
Jan 27
source share



All Articles