0

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

意见

  • MainWindow(View)(此视图的 DataContext 绑定到 MainWindowViewModel)

  • ItemViewWindow(DataContext 绑定了一个 ItemListViewModel)

视图模型

  • MainWindowViewModel(包含:ObservableCollection 项)

  • ItemListViewModel(包含:ObservableCollection Items、ItemViewModel SelectedItem、其他属性/命令)

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

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

4

1 回答 1

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 的集合

第一种方法似乎更简单

于 2012-10-09T11:28:13.977 回答