C# MVVM Light:RelayCommand:在构造函数中定义它是惰性的还是惰性的?

C# MVVM Light:RelayCommand:在构造函数中定义它是惰性的还是惰性的?,c#,command,mvvm-light,C#,Command,Mvvm Light,关于如何在视图模型中定义RelayCommand,有几个示例: /// <summary> /// Gets the LogOnCommand. /// </summary> /// <value>The LogOnCommand.</value> public RelayCommand<LogOnUser> LogOnCommand { get { if (this.logOnCommand == nu

关于如何在视图模型中定义RelayCommand,有几个示例:

/// <summary>
/// Gets the LogOnCommand.
/// </summary>
/// <value>The LogOnCommand.</value>
public RelayCommand<LogOnUser> LogOnCommand
{
    get
    {
        if (this.logOnCommand == null)
        {
            this.logOnCommand = new RelayCommand<LogOnUser>(
                action =>
                {
                    // Action code...
                },
                g => g != null);
        }

        return this.logOnCommand;
    }
}
选项1(懒惰):

//
///获取LogOnCommand。
/// 
///LogOnCommand。
公共关系命令LogOnCommand命令
{
得到
{
if(this.logOnCommand==null)
{
this.logOnCommand=新的RelayCommand(
动作=>
{
//动作码。。。
},
g=>g!=null);
}
返回此.logOnCommand;
}
}
选项2(在构造函数中)

//
///初始化类的新实例。
/// 
公共LogOnFormViewModel()
{
this.logOnCommand=新的RelayCommand(
动作=>
{
//动作码。。。
},
g=>g!=null);
}
/// 
///获取LogOnCommand。
/// 
///LogOnCommand。
public RelayCommand LogOnCommand{get;private set;}

什么是最好/最清晰的设计?

这取决于你喜欢什么风格。如果可以避免的话,大多数人不喜欢在属性获取程序中有一堆逻辑

就个人而言,我更喜欢使用真实的方法来调用,而不是匿名方法。我的ViewModels看起来像这样

public class MyViewModel : ViewModelBase
{
    public RelayCommand<CommandParam> MyCommand { get; private set; }

    public MyViewModel()
    {
        CreateCommands();
    }

    private void CreateCommands()
    {
        MyCommand = new RelayCommand<CommandParam>(MyCommandExecute);
    }

    private void MyCommandExecute(CommandParam parm)
    {
        // Action code...
    }
}
公共类MyViewModel:ViewModelBase { public RelayCommand MyCommand{get;private set;} 公共MyViewModel() { CreateCommands(); } 私有void CreateCommands() { MyCommand=新的RelayCommand(MyCommand执行); } 私有void MyCommandExecute(CommandParam parm) { //动作码。。。 } } 请注意,如果不使用enable命令,则不需要调用设置该命令的ctor重载

public class MyViewModel : ViewModelBase
{
    public RelayCommand<CommandParam> MyCommand { get; private set; }

    public MyViewModel()
    {
        CreateCommands();
    }

    private void CreateCommands()
    {
        MyCommand = new RelayCommand<CommandParam>(MyCommandExecute);
    }

    private void MyCommandExecute(CommandParam parm)
    {
        // Action code...
    }
}