Mobile Zone is brought to you in partnership with:

Matt has been paid to develop software for the past 12 years. He specializes in mobile and web development and has recently been doing a lot with Windows Phone 7. He runs DevEvening (http://devevening.co.uk/) a .net focused user group in Surrey and the Windows Phone User Group (http://wpug.net/) in London. He blogs at http://blog.mrlacey.co.uk/ and tweets at @mrlacey & @wpug. Matt is a DZone MVB and is not an employee of DZone and has posted 102 posts at DZone. You can read more from them at their website. View Full User Profile

More on Bad Ways to Set Up Commands in Your View Model

12.04.2012
| 2504 views |
  • submit to reddit

Last week I wrote about a bad way to set up commands in your view model. This prompted a few comments and strong opinions.

My main intention with the post was originally to rally against creating properties with a private setter when they will only ever be set once and the code that does the setting is kept apart from the property. All things being equal, I'd rather maintain code that looks like my preferred code than the first example.

I do, however, appreciate that this is not optimal in all situations. I've just spent lots of time working with code that does trivial things in the command or are executed occasionally, and so the overhead of creating a new command each time it's needed is not an issue.

For the avoidance of doubt, I'm perfectly fine with any of the following when used at an appropriate time. 

public class MyViewModel : ViewModelBase
{
    private RelayCommand myCommand;
 
    public RelayCommand MyCommand
    {
        get
        {
            if (myCommand == null)
            {
                myCommand = new RelayCommand(() =>
                {
                    // some functionality here
                });
            }
 
            return myCommand;
        }
    }
}

or

public class MyViewModel : ViewModelBase
{
    private RelayCommand myCommand;
 
    public RelayCommand SaveCommand
    {
        get
        {
            if (myCommand == null)
            {
                myCommand = new RelayCommand(this.Save);
            }
 
            return myCommand;
        }
    }
 
    private void Save()
    {
        // do something
    }
}

and I've used both in the past.

Anyway, moving on...

Published at DZone with permission of Matt Lacey, author and DZone MVB. (source)

(Note: Opinions expressed in this article and its replies are the opinions of their respective authors and not those of DZone, Inc.)