Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I bind a List collection to TabControl headers in WPF?

Tags:

I can get data into my TabControl but the headers have frames around them and I can't slick from tab to 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; } } 
like image 801
Edward Tanguay Avatar asked Feb 26 '09 09:02

Edward Tanguay


2 Answers

Here ist what I would 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> 
like image 145
Christof Avatar answered Oct 10 '22 14:10

Christof


just bind your List to your TabControl as ItemsSource, e.g.

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

this will give you a tab for each object in customer.

like image 25
Joachim Kerschbaumer Avatar answered Oct 10 '22 15:10

Joachim Kerschbaumer