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

时间:2015-01-20 18:13:22

标签: c# wpf xaml mvvm

使用MVVM进行File-> Exit的关闭操作有什么意义。

当您可以简单地为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();
}

2 个答案:

答案 0 :(得分:8)

对于那个的情况,你有一点争论。如果没有别的,关闭视图可以很容易地被解释为完全与视图相关,因此Click事件处理程序从一开始就有意义。与视图相关的代码在视图中,而不是VM。

但是,我会挑战你的观点,Command难以设置。使用DelegateCommandhttp://wpftutorial.net/DelegateCommand.html需要两行其他代码:

public ICommand ExitCommand {get; private set;}

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

处理程序无论哪种方式都是相同的。虽然Exit可能不需要命令,但一般情况下,ICommand是正确的方法,实际上并不是那么难。

答案 1 :(得分:1)

你是绝对正确的 - 如果处理程序是纯UI相关的,那么它不会以任何方式打破MVVM(尽管有些极端分子说过)。 MVVM是为解耦UI和业务逻辑而创建的模式 - 代码中的“UI事物”是可以的。