2014-03-02 42 views
0

我設計一個WPF應用程序,並具有以下的ViewModels:WPF的ViewModels和綁定

  • ProjectViewModel(包含GroupViewModels的一個ObservableCollection)
  • GroupViewModel(包含ItemViewModels的一個ObservableCollection)
  • ItemViewModel

我打算用一個包含多個Tabs包含一Window表示此。

下面是它如何看:

enter image description here

在我MainWindow.xaml

<Window.DataContext> 
    <viewModel:ProjectViewModel/> 
</Window.DataContext> 

我打算結合視圖模型查看UI元素如下:

  • ProjectViewModel - >(綁定到)窗口
  • GroupViewModel - >(綁定)的TabItem
  • ItemViewModel - >(綁定)一些自定義的控制,只是顯示爲彩色矩形現在

這是我想不通的問題.. 。

的標籤,需要是動態的(可以被添加/由用戶刪除)。

爲了做到這一點,我也跟着上CodeProject.com教程:Add/Remove Tabs Dynamically in WPF

在此代碼,TabControl.DataContext被設置爲的TabItems的列表,其具有項添加/移除基於用戶動作。

但是,如果我綁定TabControl.DataContext到的TabItems的名單,就不會失去我將它綁定到我的GroupViewModel的能力嗎?

有沒有辦法將它綁定到兩者?

繼MVVM模式,不是的UIElement的的DataContext應該被綁定到視圖模型,而不是其他的UIElement。

有沒有一種方法可以將我的ViewModels綁定到我的View UIElements,就像我之前計劃的那樣,仍然可以執行動態選項卡?

非常感謝您的任何想法或建議。

菲利普

回答

3

這是沒有必要每個嵌套集合勢必視覺樹的嵌套元素。 DataContext依賴項屬性通過該樹繼承。

<Window.DataContext> 
    <viewModel:ProjectViewModel/> 
</Window.DataContext> 
<TabControl 
     ItemsSource="{Binding GroupViewModels}"> 
.... 
+0

爲了讓我使用這段代碼,我需要讓我的'GroupViewModel'擴展'System.Windows.Controls.TabItem'嗎?「TabControl」的項目不需要是「TabItem」嗎? –