Почему RelayCommands обычно используют отложенную инициализацию?
-
04-10-2019 - |
Вопрос
При использовании Джоша Смита Команда ретрансляции, большинство примеров, которые я видел, используют отложенную инициализацию, такую как:
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, как вы предлагаете, причин для этого очень мало.
Не связан с StackOverflow