宣布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)"

有没有一种人们使用的更整洁/"标准"的方式?

宣布RelayCommands的最佳/简洁方式

我已经使用了您指定的第一种格式,它对我来说很好。

此外,如果您使用的是WPF,那么绑定无论如何都不适用于字段,所以即使您可以使用第二种方法进行编译,它也不会连接到您的UI。

一种选择是放弃有其局限性的命令,并使用另一种机制,如Caliburn.Micro.提供的Actions。然后,您只需要您的视图模型动词:

public void Save()
{
}
<Button x:Name="Save">Save</Button>

我使用的是:

 public ICommand StopCommand 
 { 
     get{return new RelayCommand(OnStop);}
 }