C#:WPF MVVM 命令绑定与事件回调

C#: WPF MVVM Command Binding vs. Event Callback

将 MVVM 用于文件-> 退出的关闭操作有什么意义。

当您可以简单地为 Click 事件创建事件回调时,制作关闭命令似乎需要做很多工作。对于像这样与数据或业务逻辑没有任何关系的事情,我不认为使用 MVVM 方法有什么意义。为什么不只使用以下内容:

xaml:

<MenuItem Header="_File" Background="WhiteSmoke">
    <MenuItem Name ="Exit" Tag="Exit" Header="Exit" Click="Exit_Click"/>                
</MenuItem>  

后面的代码:

private void Exit_Click(object sender, RoutedEventArgs e)
{
    this.Close();
}

你完全正确 - 如果处理程序是纯粹的 - UI 相关那么它不会以任何方式破坏 MVVM(尽管一些极端分子说)。 MVVM 是为分离 UI 和业务逻辑而创建的模式 - "UI things" 在代码中是可以的。

对于那个案例,你有一点争论。如果不出意外,关闭 视图很容易被解释为完全与视图相关,因此 Click 事件处理程序开始是有意义的。与视图相关的代码进入视图,而不是 VM。

但是,我会质疑您认为 Command 很难设置的观点。使用 DelegateCommandhttp://wpftutorial.net/DelegateCommand.html 需要 两行 附加代码:

public ICommand ExitCommand {get; private set;}

public MyViewModel()
{
    ExitCommand = new DelegateCommand(ExitApp);
}

两种方式的处理程序都是一样的。虽然 Exit 可能不需要命令,但一般来说,ICommand 是正确的方法,实际上并不难。