gpt4 book ai didi

wpf - 正确使用命令

转载 作者:行者123 更新时间:2023-12-03 10:19:31 25 4
gpt4 key购买 nike

那么使用 MVVM,专家们是如何处理这种情况的呢?

我有一个带有打开/保存菜单项的窗口,它们都使用标准的 WPF 命令。 Window 有一个包含命令对象的底层 ViewModel。这些命令对象是实现 ICommand 的简单类的实例。接口(interface);如OpenCommandSaveCommand .他们每个人的Execute方法调用Open()Save() VM的功能分别。你知道的所有标准 MVVM 东西!

现在的问题是:当用户单击打开菜单项时,他可能已经对当前文档进行了更改,所以我想检查一下并调用 Save()调用 Open() 之前的函数.谁具体负责执行此操作以及如何执行此操作?

  • 我可以在 OpenCommand.Execute() 中执行此操作并调用SaveCommand.Execute()那里。
  • 我可以调用VM.Save()函数直接在 OpenCommand.Execute() 内.
  • 我也可以在我的 VM 的 Open() 函数中调用 Save()。

  • 从原子性的角度来看,Open() 函数实际上应该只打开一个文档而不做其他验证/检查。但是同样的逻辑也适用于 OpenCommand。那么我应该把这个功能放在哪里呢?

    最佳答案

    我认为,在这种情况下,最好对命令进行抽象,因此我建议第三段:

    I could call Save() inside the Open() function of my VM too.



    Open() function should really only open a document and not do other validation/checks.



    我同意,但是例如,在打开门之前,您应该首先确保它已关闭。是否变成了单独的功能?我认为这会更容易,更正确:
    private void Open()
    {
    if (IsSomeChanges == true)
    {
    Save();
    }

    ...
    }
    Command pattern 允许您在旁边调用 View您的方法具有最小的依赖性并来自不同的控件。例如,如果您必须在 View 一侧调用命令,例如在附加的行为中,那么您将需要使用 SomeCommand.Execute() .但是在 ViewModel里面您可以简单地直接调用此方法。

    关于wpf - 正确使用命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22487191/

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