声明RelayCommands的最佳/最佳方式

时间:2012-02-03 14:21:58

标签: c# mvvm readability relaycommand

我一直试图在我的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)'

人们使用的是一种更整洁/“标准”的方式吗?

3 个答案:

答案 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);}
 }