【问题标题】:How can I bind a List collection to TabControl headers in WPF?如何将 List 集合绑定到 WPF 中的 TabControl 标头?
【发布时间】:2023-03-29 13:13:01
【问题描述】:

我可以将数据输入到我的 TabControl 中,但标题周围有框架,我无法在标签之间滑动。

我在这个 TabControl 上的 XAML 绑定语法有什么问题?

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>  

后面的代码:

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

【问题讨论】:

  • 查看 Christof 的回答 (stackoverflow.com/questions/589802/…) 以了解 XAML 以使其工作 - 您需要一个 TabControl.ContentTemplate 块用于内容,因为 TabControl.ItemTemplate 仅适用于选项卡的标题部分。

标签: wpf data-binding tabcontrol


【解决方案1】:

这就是我要做什么

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

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

【讨论】:

  • 啊!,ContentTemplate。谢谢!
【解决方案2】:

只需将您的列表绑定到您的 TabControl 作为 ItemsSource,例如

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

这将为您提供客户中每个对象的选项卡。

【讨论】:

  • 谢谢,这让我更进一步,但我现在无法在标签之间单击,并且标题文本周围有框架。我在上面发布了新代码,需要更改哪些内容才能将数据绑定到标题和选项卡的内容?
  • 这是我的问题——除了无法通过单击标题文本来选择选项卡外,一切正常,这使得选项卡控件几乎无用。
【解决方案3】:

您的答案可以在这里找到。

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

注意他是如何设置 ContentTemplate 和 ItemTemplate 的......你几乎拥有它!

【讨论】:

    【解决方案4】:

    【讨论】:

      猜你喜欢
      • 2011-08-04
      • 2010-11-18
      • 2018-10-25
      • 2011-04-07
      • 1970-01-01
      • 1970-01-01
      • 2016-09-21
      • 2012-12-10
      • 2011-02-09
      相关资源
      最近更新 更多