宣布RelayCommands的最佳/简洁方式
本文关键字:简洁 方式 最佳 RelayCommands 宣布 | 更新日期: 2023-09-27 18:22:38
我一直在努力寻找一种简洁明了的方法来在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)"
有没有一种人们使用的更整洁/"标准"的方式?
我已经使用了您指定的第一种格式,它对我来说很好。
此外,如果您使用的是WPF,那么绑定无论如何都不适用于字段,所以即使您可以使用第二种方法进行编译,它也不会连接到您的UI。
一种选择是放弃有其局限性的命令,并使用另一种机制,如Caliburn.Micro.提供的Actions。然后,您只需要您的视图模型动词:
public void Save()
{
}
<Button x:Name="Save">Save</Button>
我使用的是:
public ICommand StopCommand
{
get{return new RelayCommand(OnStop);}
}