3

我一直在尝试找到一种简洁明了的方式来在我的 ViewModel 中声明 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)”

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

4

3 回答 3

3

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

另外-如果您使用的是 WPF,则绑定无论如何都不适用于字段,因此即使您可以获得第二种编译方法,它也不会连接到您的 UI。

于 2012-02-03T14:28:30.243 回答
1

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

public void Save()
{
}

<Button x:Name="Save">Save</Button>
于 2012-02-03T14:27:47.740 回答
0

我正在使用类似的东西:

 public ICommand StopCommand 
 { 
     get{return new RelayCommand(OnStop);}
 }
于 2012-02-03T14:26:55.890 回答