选项卡控件数据模板

时间:2011-02-09 17:43:11

标签: wpf silverlight datatemplate tabcontrol

我想要一个TabControl,其中每个标签项代表一个(Employee)ViewModel;标头应该是该视图模型的DisplayName属性,内容应该是具有视图模型的数据上下文的用户控件(EmployeeDetailsView)。

所以pidgeon xaml(有这样的事情吗?):

<TabControl x:Name="Items">
    <TabItem Header="DisplayName" Content=local:EmployeeDetailsView />
<TabControl>

我的真实XAML应该是什么样的?

干杯,
Berryl

编辑Vortex

        <TabControl x:Name="Items" >
            <TabControl.ItemTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding DisplayName}" />
                </DataTemplate>
            </TabControl.ItemTemplate>
            <TabControl.ContentTemplate>
                <DataTemplate>
                    <ContentControl>
                        <local:EmployeeDetailView/>
                    </ContentControl>
                </DataTemplate>
            </TabControl.ContentTemplate>
         </TabControl>

1 个答案:

答案 0 :(得分:3)

在WPF中它非常简单。但是在Silverlight中我使用了自定义TabControl。

<强> Silverlight的

您可以找到源代码和示例here(MyTabControl.cs),我已回答了类似的问题。

现在你的代码必须是:

<my:MyTabControl x:Name="myTabs" MyItemsSource="{Binding Items}" MySelectedItem="{Binding SelectedItem}" >
    <my:MyTabControl.TabHeaderItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding DisplayName}" />
        </DataTemplate>
    </my:MyTabControl.TabHeaderItemTemplate>
    <my:MyTabControl.TabItemTemplate>
        <DataTemplate>
            <local:EmployeeDetailsView />
        </DataTemplate>
    </my:MyTabControl.TabItemTemplate>
</my:MyTabControl> 

在代码隐藏或某处:

var items = new List<Employee>(){
                new Employee{DisplayName = "Employee 1"},
                new Employee{DisplayName = "Employee 2"}};

myTabs.DataContext = new SomeCollectionModel
{
      Items = items,
      SelectedItem = items[0]
};

<强> WPF

WPF在TabControl中内置了对DataTemplates的支持,所以我必须在XAML中做一些小改动:

<TabControl x:Name="myTabs" ItemsSource="{Binding Items}" SelectedItem="{Binding SelectedItem}">
    <TabControl.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding DisplayName}" />
        </DataTemplate>
    </TabControl.ItemTemplate>
    <TabControl.ContentTemplate>
        <DataTemplate>
            <local:EmployeeDetailsView />
        </DataTemplate>
    </TabControl.ContentTemplate>
</TabControl>