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
很难设置的观点。使用 DelegateCommand
:http://wpftutorial.net/DelegateCommand.html 需要 两行 附加代码:
public ICommand ExitCommand {get; private set;}
public MyViewModel()
{
ExitCommand = new DelegateCommand(ExitApp);
}
两种方式的处理程序都是一样的。虽然 Exit
可能不需要命令,但一般来说,ICommand
是正确的方法,实际上并不难。
将 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
很难设置的观点。使用 DelegateCommand
:http://wpftutorial.net/DelegateCommand.html 需要 两行 附加代码:
public ICommand ExitCommand {get; private set;}
public MyViewModel()
{
ExitCommand = new DelegateCommand(ExitApp);
}
两种方式的处理程序都是一样的。虽然 Exit
可能不需要命令,但一般来说,ICommand
是正确的方法,实际上并不难。