我一直试图在我的ViewModels中找到一个很好的简洁方法来声明RelayCommands。
我能想到的最好的是:
public class MyViewModel
{
public ICommand StopCommand { get; private set; }
public MyViewModel()
{
StopCommand = new RelayCommand(OnStop);
}
private OnStop(object sender)
{
//hammertime
}
}
我真的想要删除两个阶段的声明/构造,例如:
public class MyViewModel
{
public readonly ICommand StopCommand = new RelayCommand(OnStop);
private OnStop(object sender)
{
//hammertime
}
}
但是,无法使用
进行编译错误CS0236:字段初始值设定项无法引用非静态 字段,方法或属性'MyViewModel.OnStop(object)'
人们使用的是一种更整洁/“标准”的方式吗?
答案 0 :(得分:3)
我已经使用了你指定的第一种格式,它对我来说很好。
另外 - 如果你正在使用WPF,那么无论如何绑定都不能用于字段,所以即使你可以使用第二种方法进行编译,它也不会连接到你的UI。
答案 1 :(得分:1)
一种选择是放弃具有限制的命令,并使用其他机制,例如Caliburn.Micro提供的操作。然后,你只需要你的视图模型动词:
public void Save()
{
}
<Button x:Name="Save">Save</Button>
答案 2 :(得分:0)
我使用的是:
public ICommand StopCommand
{
get{return new RelayCommand(OnStop);}
}