Wpf 选项卡项'的绑定;s内容控件

Wpf 选项卡项'的绑定;s内容控件,wpf,data-binding,tabcontrol,Wpf,Data Binding,Tabcontrol,我有一个TabControl,其中ItemsSource设置为ObservableCollection,并使用ContentTemplateSelector创建不同的选项卡 class BookTab { public string Name { get; set; } public string Type { get; set; } public object Data { get; set; } } <TabControl Name="tabC

我有一个TabControl,其中ItemsSource设置为
ObservableCollection
,并使用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>
类书籍选项卡
{  
公共字符串名称{get;set;}
公共字符串类型{get;set;}
公共对象数据{get;set;}
}
键入BookTab确定在相应选项卡中使用的数据模板,名称显示在选项卡标题上,数据应显示在选项卡内容中,即DataGrid。 数据被设置为不同类型的可观察集合

DataTemplate可能如下所示:

<DataTemplate x:Key="bookTabTemplate">  
    <TabItem Name="bookTab">  
        <Grid>  
            <DataGrid Name="bookGrid">  
                ...  
            </DataGrid>  
        </Grid>  
    </TabItem>  
</DataTemplate>

...  
我尝试了不同的方法将数据属性绑定到DataGrid的ItemsSource,但我得到的只是网格显示单词“Book”(BookTab的Name属性值)。
我的猜测是,我必须以某种方式将TabControl的绑定传播到DataGrid,但我无法理解它。

我会这样做:

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


您的datagrid数据上下文可能是BookTab(您可以使用确认)

如果这是正确的,您所要做的就是将datagrid itemssource绑定到BookTab数据属性

<DataGrid Name="bookGrid" ItemsSource="{Binding Path=Data}" />

这应该能奏效

<DataGrid Name="bookGrid" ItemsSource="{Binding Path=Data}" />