gpt4 book ai didi

c# - 如何在 MVVM 中处理 CloseDocument 命令

转载 作者:行者123 更新时间:2023-11-30 17:42:52 25 4
gpt4 key购买 nike

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

  1. 我可以将一个事件添加到文档 VM 中,该事件是在关闭之前引发的。然后我可以将它的事件监听器添加到我添加的每个新文档的主窗口 VM。
  2. 我可以将 CloseDocument 命令移动到主窗口 VM,但理想情况下事件不属于那里。
  3. 我可以将 Documents 集合的引用传递给我的文档 VM,以便它在关闭自身之前更新集合。

在遵循 MVVM 实践时应该使用其中的哪一个(或者如果有人有更好的)?

最佳答案

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

每个文档都会有一个引用此方法的命令:

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 之间使用强引用。

关于c# - 如何在 MVVM 中处理 CloseDocument 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31583509/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com