我应该将所有事件放在视图代码后面还是有更合适的方法,例如将命令放在 ViewModel 中?
例如,我想在双击数据网格行时打开选项卡,我应该在哪里处理这个事件?
不,你不应该将事件放在代码后面。在MVVM(模型-视图-视图模型)设计模式中,视图模型是负责处理应用程序的表示逻辑和状态的组件。这意味着视图的代码隐藏文件不应包含任何代码来处理从任何用户界面 (UI) 元素引发的事件。
例如,如果您的 xaml 中有按钮
<Button Content="OK" Click="btn_Click"/>
protected void btn_Click(object sender, RoutedEventArgs e)
{
/* This is not MVVM! */
}
相反,你可以使用WPF命令 http://www.wpftutorial.net/delegatecommand.html您所要做的就是绑定到其 Execute 和 CanExecute 委托并调用您的命令。
所以你的代码现在将是
public class ViewModel
{
private readonly DelegateCommand<string> _clickCommand;
public ViewModel()
{
_clickCommand = new DelegateCommand(
(s) => { /* perform some action */ }, //Execute
null
} //CanExecute );
public DelegateCommand ButtonClickCommand
{
get { return _clickCommand; }
}
}
<Button Content="COOL" Command="ButtonClickCommand"/>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)