Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why do RelayCommands typically use lazy initialization?

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?

like image 356
Wilka Avatar asked Sep 22 '10 13:09

Wilka


1 Answers

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.

like image 98
Judah Gabriel Himango Avatar answered Nov 15 '22 05:11

Judah Gabriel Himango