WPF ViewModels和Bindings

时间:2014-03-02 00:34:00

标签: c# wpf xaml mvvm

我正在设计WPF应用程序并具有以下ViewModel:

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

我计划使用包含Window的多个Tabs的{​​{1}}进行表示。

以下是它的外观:

enter image description here

在我的Items

MainWindow.xaml

我计划将ViewModel绑定到View UIElements,如下所示:

  • ProjectViewModel - > (绑定)窗口
  • GroupViewModel - > (绑定)TabItem
  • ItemViewModel - > (绑定)一些自定义控件,现在只显示为彩色矩形

这是我无法弄清楚的问题......

选项卡需要是动态的(可以由用户添加/删除)。

为了实现这一目标,我遵循了CodeProject.com上的教程:Add/Remove Tabs Dynamically in WPF

在此代码中,<Window.DataContext> <viewModel:ProjectViewModel/> </Window.DataContext> 设置为TabItems列表,其中包含根据用户操作添加/删除的项目。

但是,如果我将TabControl.DataContext绑定到TabItems列表,我不会失去将它绑定到GroupViewModel的能力吗?

有没有办法将它绑定到两者?

遵循MVVM模式,不是UIElement的DataContext应该绑定到ViewModel,而不是绑定到另一个UIElement。

有没有办法可以按照我的计划将ViewModel绑定到View UIElements并仍然执行动态标签?

非常感谢您的任何想法或建议。

菲利普

1 个答案:

答案 0 :(得分:3)

没有必要将每个嵌套集合绑定到可视树的嵌套元素。 DataContext依赖项属性通过该树继承。

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