Почему RelayCommands обычно используют отложенную инициализацию?

StackOverflow https://stackoverflow.com/questions/3769918

Вопрос

При использовании Джоша Смита Команда ретрансляции, большинство примеров, которые я видел, используют отложенную инициализацию, такую как:

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 при настройке привязки, поэтому я не вижу причин использовать этот метод вместо настроек в конструкторе.

Я что-то здесь упускаю?

Это было полезно?

Решение

На самом деле, WPF и Silverlight получат команду relay только один раз для каждой привязки, так что вам вообще не нужно сохранять резервное поле:

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

Так что, хотя нет ничего плохого в том, чтобы создать его в .ctor, как вы предлагаете, причин для этого очень мало.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top