3

ViewModels で RelayCommands を宣言するためのきちんとした簡潔な方法を見つけようとしています。

私が思いつくことができる最高のものは次のとおりです。

public class MyViewModel
{
    public ICommand StopCommand { get; private set; }

    public MyViewModel()
    {
        StopCommand = new RelayCommand(OnStop);
    }

    private OnStop(object sender)
    {
         //hammertime
    }

}

私が本当にやりたいのは、次のような2段階の宣言/構築を削除することです:

public class MyViewModel
{
    public readonly ICommand StopCommand = new RelayCommand(OnStop);

    private OnStop(object sender)
    {
         //hammertime
    }
}

ただし、これはコンパイルに失敗します

エラー CS0236: フィールド初期化子は、非静的フィールド、メソッド、またはプロパティ 'MyViewModel.OnStop(object)' を参照できません

人々が使用するよりきちんとした/「標準的な」方法はありますか?

4

3 に答える 3

3

あなたが指定した最初の形式をかなり使用しましたが、それは私にとってはうまくいきます。

また、WPF を使用している場合、バインドはフィールドでは機能しないため、2 番目の方法でコンパイルできたとしても、UI に接続されません。

于 2012-02-03T14:28:30.243 に答える
1

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 に答える