Why do RelayCommands typically use lazy initialization?
-
04-10-2019 - |
Question
When using Josh Smith's RelayCommand, most of the examples I've seen use lazy initialization such as:
public class ViewModel
{
private ICommand myCommand;
public ICommand MyCommand
{
get
{
if (myCommand == null)
{
myCommand = new RelayCommand(p => DoSomething() );
}
return myCommand;
}
}
// ... stuff ...
}
Rather than creating the RelayCommand in the constructor, like this:
public class ViewModel
{
public ViewModel()
{
MyCommand = new RelayCommand(p => DoSomething());
}
public ICommand MyCommand
{
get;
private set;
}
// ... stuff ...
}
What's the benefit of using lazy initialization here? It will have to call the get property when setting up the binding, so I can't seen a reason to use this method over settings things up in the constructor.
Am I missing something here?
Solution
Actually, WPF and Silverlight will get the relay command just once per binding, so you don't really need to store a backing field at all:
public ICommand MyCommand
{
get
{
return new RelayCommand(p => DoSomething());
}
}
So while there's nothing wrong with creating it in the .ctor as you suggest, there's very little reason to.
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow