2009-02-26 19 views
23

Puedo obtener datos en mi TabControl pero los encabezados tienen marcos a su alrededor y no puedo deslizar de una pestaña a otra.¿Cómo puedo vincular una colección de listas a los encabezados de TabControl en WPF?

¿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; } 
} 
+0

u ur suerte usando WPF ... tengo problema similar con Silverlight, ya que no son compatibles con un convertidor ItemSource para tabcontrol. –

+0

Consulte la respuesta de Christof (http://stackoverflow.com/questions/589802/how-can-i-bind-a-list-collection-to-tabcontrol-headers-in-wpf/3196668#3196668) para que el XAML haga este trabajo: necesita un bloque TabControl.ContentTemplate para el contenido, ya que TabControl.ItemTemplate SOLO es para la parte del encabezado de la pestaña. –

Respuesta

6

acaba de vincular a su lista a su TabControl como ItemsSource, por ejemplo,

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

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

+2

Gracias, eso me ayudó aún más, pero ahora no puedo hacer clic de una pestaña a otra y los textos del encabezado tienen marcos a su alrededor. Publiqué el nuevo código anterior, ¿qué necesita cambiar para poder vincular los datos al encabezado y al contenido de las pestañas? –

+1

Este es mi problema: todo funciona, excepto que no se pueden seleccionar pestañas haciendo clic en el texto del encabezado, lo que hace que el tabcontrol sea casi inútil. – LineloDude

46

Aquí ist 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> 
+0

ESTO realmente funciona. :) –

+6

¡Ah !, 'ContentTemplate'. ¡Gracias! –

Cuestiones relacionadas