Почему 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 при настройке привязки, поэтому я не вижу причины использовать этот метод над настройками вещей в конструкторе.
Я что-то пропустил?
Ответы
Ответ 1
На самом деле, WPF и Silverlight получат команду relay только один раз для привязки, поэтому вам действительно не нужно сохранять поле поддержки:
public ICommand MyCommand
{
get
{
return new RelayCommand(p => DoSomething());
}
}
Итак, пока нет ничего плохого в том, чтобы создать его в .ctor, как вы предлагаете, очень мало причин.