2010-11-17 62 views
0

我有一個TabControl的ItemsSource設置爲ObservableCollection<BookTab>並使用ContentTemplateSelector創建不同的選項卡。綁定TabItem的內容控件

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在BookTab確定的DataTemplate在相應的標籤所使用的,名稱被顯示在選項卡頭和數據應該被顯示在選項卡的內容,即,數據網格。 數據設置爲不同類型的ObservableCollections。

DataTemplate中看起來是這樣的:

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

我試圖將數據綁定屬性DataGrid的ItemsSource時不同的方式,但我得到的是網格中顯示單詞「書」(BookTab的名稱屬性值)。 我的猜測是我必須以某種方式傳播TabControl的綁定到DataGrid,但我無法弄清楚。

回答

1

我會做這樣的:

<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

0

您的數據網格數據上下文可能是BookTab(你可以確認這一點使用snoop

如果這是正確的,你所要做的就是將DataGrid的ItemsSource綁定到BookTab數據屬性

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

這應該好訣竅