2014-01-05 50 views
1

如果我有一個名爲GuiObject的類,並且該類有一個名爲「GuiObjects」的GuiObjects列表。在tabControl中爲TabItems使用數據模板

現在說我的窗口有GuiObjects,這是我在的.xaml文件中使用數據綁定到列表:

<StackPanel> 
    <ItemsControl ItemsSource="{Binding TopObjectList}" DataTemplateSelector="{DynamicResource templateSelector"/> 
</StackPanel> 

我可以做一個DataTemplate對每種類型的FrameworkElement的我想生成,但我對於TabControl有問題。我可以爲TabControl的,像這樣創建一個DataTemplate:

<DataTemplate x:key="TabControlTemplate" DataTemplateSelector="{DynamicResource templateSelector" > 
    <TabControl ItemsSource="{Binding GuiObjects}" /> 
</DataTemplate> 

,其結果是有存在的每種適當的頁面的標籤控制,但沒有單獨的TabItems的內容。很公平,我只是爲TabItems製作一個DataTemplate。對於每個TabItem,我想將GuiObjects的內容放入一個堆棧面板。

<DataTemplate x:key="TabItemTemplate" DataTemplateSelector="{Resource templateSelector"> 
    <TabItem Header = {Binding Title}> 
     <StackPanel> 
      <ItemsControl ItemsSource="{Binding GuiObjects}" DataTemplateSelector="{DynamicResource templateSelector"/> 
     </StackPanel> 
    </TabItem> 
</DataTemplate> 

這裏的問題是TabItemTemplate永遠不會被調用。我已經嘗試過涉及在TabControlTemplate中設置ItemContainerStyle的解決方案,但後來我遇到了層次結構問題。如果我在TabItem的內容中綁定「GuiObjects」,我將綁定tabItems列表,而不是每個TabItem中的列表。 (我想做第二個)。這裏有一個例子:

<DataTemplate x:key="TabControlTemplate" DataTemplateSelector="{DynamicResource templateSelector" > 
    <TabControl ItemsSource="{Binding GuiObjects}"> 
     <TabControl.ItemContainerStyle> 
      <Style TargetType="TabItem"> 
       <Setter Property="Header" Value="{Binding Title}"/> 
       <Setter Property="Content" Value="<StackPanel><ItemsControl ItemsSource="{Binding GuiObjects}" DataTemplateSelector="{DynamicResource templateSelector"/></StackPanel>"/> 
      </Style> 
     </TabControl.ItemContainerStyle> 
    </TabControl> 
</DataTemplate> 

此外,該解決方案具有層次問題:當我說:{結合GuiObjets}我指的TabItems的列表,而不是每個TabItem的內FrameworkElements名單。

該解決方案要麼爲TabControl和TabItem使用單獨的DataTemplates,而只是修復它,以便DataTemplateSelector實際上爲TabItems工作(不知道如何執行此操作)。或者使用ItemContainerStyle,並以某種方式告訴它在綁定GuiObjects時下一層。有人知道怎麼做嗎?

+1

['DataTemplate'](http://msdn.microsoft.com/zh-cn/library/system.windows.datatemplate%28v=vs.110%29.aspx)沒有'DataTemplateSelector'屬性,所以我想知道如何在第二個代碼示例中爲其分配一個值。 –

回答

相關問題