なぜリレーコマンドは通常、怠zyな初期化を使用するのですか?
-
04-10-2019 - |
質問
ジョシュ・スミスを使うとき RelayCommand, 、私が見た例のほとんどは、次のような怠zyな初期化を使用しています。
public class ViewModel
{
private ICommand myCommand;
public ICommand MyCommand
{
get
{
if (myCommand == null)
{
myCommand = new RelayCommand(p => DoSomething() );
}
return myCommand;
}
}
// ... stuff ...
}
このようなコンストラクターにリレーコマンドを作成するのではなく:
public class ViewModel
{
public ViewModel()
{
MyCommand = new RelayCommand(p => DoSomething());
}
public ICommand MyCommand
{
get;
private set;
}
// ... stuff ...
}
ここで怠zyな初期化を使用することの利点は何ですか?バインディングをセットアップするときにGETプロパティを呼び出す必要があるため、コンストラクターの設定でこの方法を使用する理由は見られません。
ここに何かが足りませんか?
解決
実際、WPFとSilverlightはバインディングごとに一度だけリレーコマンドを取得するため、バッキングフィールドをまったく保存する必要はありません。
public ICommand MyCommand
{
get
{
return new RelayCommand(p => DoSomething());
}
}
したがって、あなたが提案するように.ctorでそれを作成することに何の問題もありませんが、理由はほとんどありません。
所属していません StackOverflow