Подтвердить что ты не робот

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

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

Я что-то пропустил?

4b9b3361

Ответ 1

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

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

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