MVVM を実行してコマンドを使用している場合、 MSDNの元の MVVM 記事の次の例のように、プライベート RelayCommand フィールドまたは DelegateCommand フィールドによってサポートされている ViewModel の ICommand プロパティがよく表示されます。
RelayCommand _saveCommand;
public ICommand SaveCommand
{
get
{
if (_saveCommand == null)
{
_saveCommand = new RelayCommand(param => this.Save(),
param => this.CanSave );
}
return _saveCommand;
}
}
ただし、これは非常に煩雑で、新しいコマンドを設定するのはかなり面倒です (私は、このような入力をためらうベテランの WinForms 開発者と一緒に仕事をしています)。だから私はそれを単純化したいと思って、少し掘り下げました。get{} ブロックの最初の行にブレークポイントを設定すると、アプリが最初にロードされたときにのみヒットすることがわかりました。後で、必要な数のコマンドを起動できますが、このブレークポイントはヒットしません。これを単純化して、ViewModel から混乱を取り除きたいと考えていたところ、次のコードが同じように機能することに気付きました。
public ICommand SaveCommand
{
get
{
return new RelayCommand(param => this.Save(), param => this.CanSave );
}
}
ただし、C# やガベージ コレクターについては、これが問題を引き起こす可能性があるかどうか (場合によっては過剰なガベージが生成されるなど) を知るには十分ではありません。これは何か問題を引き起こしますか?