18

Josh Smith のRelayCommandを使用する場合、私が見たほとんどの例では、次のような遅延初期化を使用しています。

public class ViewModel
{
    private ICommand myCommand;

    public ICommand MyCommand
    {
        get
        {
            if (myCommand == null)
            {
                myCommand = new RelayCommand(p => DoSomething() );
            }

            return myCommand;
        }
    }
    // ... stuff ...

}

次のように、コンストラクターで RelayCommand を作成するのではなく、

public class ViewModel
{
    public ViewModel()
    {
            MyCommand = new RelayCommand(p => DoSomething());
    }

    public ICommand MyCommand
    {
        get;
        private set;

    }

    // ... stuff ...
}

ここで遅延初期化を使用する利点は何ですか? バインディングを設定するときに get プロパティを呼び出す必要があるため、コンストラクターでの設定よりもこのメソッドを使用する理由がわかりません。

ここで何か不足していますか?

4

1 に答える 1

15

実際、WPF と Silverlight は、バインディングごとに 1 回だけリレー コマンドを取得するため、バッキング フィールドを格納する必要はまったくありません。

public ICommand MyCommand
{
    get
    {
        return new RelayCommand(p => DoSomething());
    }
}

したがって、あなたが示唆するように .ctor で作成しても問題はありませんが、そうする理由はほとんどありません。

于 2010-09-22T13:55:49.997 に答える