我想要一个TabControl,其中每个标签项代表一个(Employee)ViewModel;标头应该是该视图模型的DisplayName属性,内容应该是具有视图模型的数据上下文的用户控件(EmployeeDetailsView)。
所以pidgeon xaml(有这样的事情吗?):
<TabControl x:Name="Items">
<TabItem Header="DisplayName" Content=local:EmployeeDetailsView />
<TabControl>
我的真实XAML应该是什么样的?
干杯,
Berryl
<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>
答案 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>