我在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代码隐藏,是否有更优雅的方法?
答案 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集合的消息以订阅
第一种方法似乎更直接