2009-08-11 90 views
25

把TabControl的項目綁定到ObservableCollection的最簡單的例子是什麼?如何將TabControl的項目綁定到wpf中的可觀察集合?

每個選項卡的內容都將具有唯一的數據,實際上,這些數據將具有其自身綁定到項目組件的observableCollections。

目前我有一個用戶控件,我希望在創建它時儘快設置每個選項卡的內容。我還需要在創建選項卡時動態設置此新用戶控件的datacontext。所以,本質上,我希望tabcontrol的observablecollection包含映射到每個選項卡中的數據的模型視圖。

最重要的是,我需要做所有這些,而不違反WPF中的MVVM!任何幫助?

非常感謝!

回答

35

基本例如:

<Window.Resources> 

    <DataTemplate x:Key="templateForTheContent" DataType="{x:Type vm:TheViewModelType}"> 
     <v:YourUserControl/> 
    </DataTemplate> 

    <DataTemplate x:Key="templateForTheHeader" DataType="{x:Type vm:TheViewModelType}"> 
     <TextBlock Text="{Binding ThePropertyToDisplayInTheHeader}"/> 
    </DataTemplate> 

</Window.Resources> 

... 

<TabControl ItemsSource="{Binding YourCollection}" 
      ContentTemplate="{StaticResource templateForTheContent}" 
      ItemTemplate="{StaticResource templateForTheHeader}"> 
</TabControl> 
+10

你知道,WPF + MVVM有這樣一個陡峭的學習曲線,但一旦你得到它的掛起的解決方案其實很優雅,乾淨。感謝您的幫助:) – bluebit 2009-08-12 08:41:16

+0

我同意WPF有一個陡峭的學習曲線,但我不會說MVVM模式...實際上,當你開始使用它時,感覺很自然:) – 2009-08-12 09:09:58

+1

只要數據模板只包含只讀控件,此方法有效。否則,您必須小心:每當您更改標籤頁時,TabControl都會重新創建視圖,即當您從一個標籤頁切換到另一個標籤頁並重新切換時,您將失去可視狀態。 – 2012-04-04 17:18:14

相關問題