如何在MVVM中处理CloseDocument命令

时间:2015-07-23 09:35:29

标签: c# wpf mvvm mdi

所以我有一个主窗口,显示MDI类型界面,里面打开了多个文档标签(就像VS一样)。主窗口和文档窗口都有各自的VM。 CloseDocument 命令在文档中处理,但需要告诉主窗口VM,以便主窗口VM可以更新其Documents集合。在MVVM中管理这个的正确方法是什么?我有一些想法:

  1. 我可以添加一个事件来记录在关闭之前引发的VM。然后,我可以将其事件侦听器添加到我添加的每个新文档的主窗口VM。
  2. 我可以将 CloseDocument 命令移动到主窗口VM,但理想情况下该事件不属于那里。
  3. 我可以将Documents集合的引用传递给我的文档VM,以便在关闭之前更新集合。
  4. 在遵循MVVM实践的过程中,应该使用哪些(或者如果某人有更好的人)?

1 个答案:

答案 0 :(得分:1)

我想我会选择解决方案1.如果您使用MVVM Light,那么您可以应用Messenger类型在文档之间传递信息。

每个文档都有一个Command参考这个方法:

private void CloseDocumentExecuteCommand()
{
    var message = new DocumentCloseMessage() { Document = this};
    Messenger.Default.Send<DocumentCloseMessage>(message);
}

在主窗口的VM中你会有这样的东西: (在构造函数中)

Messenger.Default.Register<CloseMessage>(this, (msgData) => this.CloseMessageReceived(msgData));

...但这只有在你有Messenger时才有效,否则你可以使用事件,但是我担心你需要在VM之间使用强引用。

相关问题