将窗口绑定到父窗口的子集合

时间:2012-10-09 11:20:54

标签: .net wpf mvvm

我在WPF中使用MVVM模型时遇到了问题。这是我的对象:

视图

  • 主窗口(查看) (此视图的DataContext绑定到MainWindowViewModel)

  • ItemViewWindow (DataContext用于绑定ItemListViewModel)

查看-模型

  • MainWindowViewModel (包含: ObservableCollection Items)

  • ItemListViewModel (包含: ObservableCollection项目, ItemViewModel SelectedItem, 其他属性/命令)

通过MainWindow上的菜单按钮访问ItemViewWindow。我希望能够将集合从MainWindow传递给ItemView(注意:我不能将它设置为DataContext,因为它需要一个ItemListViewModel)。然后在那里进行的任何更改都应该反映在MainWindow中。

我知道一种方法是将ItemListViewModel作为MainWindowViewModel的属性而不是Collection,然后我可以将其作为DataContext传递,但是在MainWindowViewModel中具有ItemListViewModel的额外功能似乎是错误的。如果不使用UI代码隐藏,是否有更优雅的方法?

1 个答案:

答案 0 :(得分:0)

为什么不:

a:让ItemListViewModel公开一个你在其上分配集合的属性,例如

class ItemListViewModel 
{
    public SomeCollectionType TheCollection { get; set; } // most likely you have INotifyPropertyChanged etc so probably more to it than get/set
}

然后在MainWindowViewModel

中实例化ItemVM时设置它
public void OpenItemList() 
{
    var itemList = new ItemListViewModel();
    itemList.TheCollection = CollectionFromThisVM;
    // etc
}

或者...

b:使用类似EventAggregator模式的内容发布包含ItemListViewModel集合的消息以订阅

第一种方法似乎更直接