我有一个TabControl,ItemsSource设置为 ObservableCollection<BookTab>
并使用ContentTemplateSelector创建不同的选项卡 .
class BookTab
{
public string Name { get; set; }
public string Type { get; set; }
public object Data { get; set; }
}
<TabControl Name="tabControl"
ContentTemplateSelector="{StaticResource tabTemplateSelector}">
<TabControl.ItemContainerStyle>
<Style TargetType="TabItem">
<Setter Property="Header" Value="{Binding Name}"/>
<Setter Property="Content" Value="{Binding}"/>
</Style>
</TabControl.ItemContainerStyle>
</TabControl>
BookTab中的类型确定在相应选项卡中使用的DataTemplate,名称显示在选项卡 Headers 上,而数据应显示在选项卡的内容中,即DataGrid . 数据设置为不同类型的ObservableCollections .
DataTemplate可能如下所示:
<DataTemplate x:Key="bookTabTemplate">
<TabItem Name="bookTab">
<Grid>
<DataGrid Name="bookGrid">
...
</DataGrid>
</Grid>
</TabItem>
</DataTemplate>
我尝试了不同的方法将Data属性绑定到DataGrid的ItemsSource,但我得到的只是网格显示单词“Book”(BookTab的Name属性值) . 我的猜测是我必须以某种方式将TabControl的绑定传播到DataGrid,但我无法弄明白 .
2 回答
我会这样做:
...稍后您在app.xaml中定义了数据内容的呈现方式......
您所要做的就是为每种类型创建一个视图(usercontrol) .
HTH
您的datagrid数据上下文可能是BookTab(您可以使用snoop确认)
如果这是正确的,您所要做的就是将datagrid itemssource绑定到BookTab Data属性
这应该可以解决问题