我有一个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>Type in BookTab确定在适当的选项卡中使用的DataTemplate,名称显示在选项卡标题上,以及应该显示在选项卡的内容中的数据,即DataGrid。数据设置为不同类型的ObservableCollections。
DataTemplate可能如下所示:
<DataTemplate x:Key="bookTabTemplate">
<TabItem Name="bookTab">
<Grid>
<DataGrid Name="bookGrid">
...
</DataGrid>
</Grid>
</TabItem>
</DataTemplate>我尝试了不同的方法将数据属性绑定到DataGrid的ItemsSource,但得到的结果都是网格显示单词"Book“(BookTab的Name属性值)。我的猜测是,我必须以某种方式将TabControl的绑定向下传播到DataGrid,但我无法弄清楚。
发布于 2010-11-18 00:19:03
我会这样做:
<TabControl SelectedItem="{Binding CurrentBook}"
IsSynchronizedWithCurrentItem="True"
ItemsSource="{Binding BookList}">
<TabControl.ContentTemplate>
<DataTemplate>
<Grid>
<ContentControl Content="{Binding Data}"
</Grid>
</DataTemplate>
</TabControl.ContentTemplate>
<TabControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}"/>
</DataTemplate>
</TabControl.ItemTemplate>
</TabControl>..。然后在app.xaml中定义数据内容的表示方式……
<DataTemplate DataType="{x:Type viewmodel:bookviewmodel1}">
<view:bookview1/>
</DataTemplate>你所要做的就是为每种类型创建一个视图(usercontrol)。
HTH
发布于 2010-11-18 00:19:34
您的datagrid数据上下文可能是BookTab (您可以使用snoop进行确认)
如果这是正确的,那么您所要做的就是将datagrid itemssource绑定到BookTab数据属性
<DataGrid Name="bookGrid" ItemsSource="{Binding Path=Data}" />这应该能起到作用
https://stackoverflow.com/questions/4206244
复制相似问题