mvvm命令设置样式

mvvm命令设置样式,mvvm,command,Mvvm,Command,这里的命令可能是Josh Smith的RelayCommand的一些变体(我把我的命令称为VmCommand),问题是ViewModel是如何创建它们的。我知道两种基本技术,第一种是在构造函数中设置所有命令属性,第二种是在属性getter中惰性地实例化命令 我更喜欢后者,因为我觉得它让我的代码更有条理,因为我通常会将与给定功能相关的所有行为包装在它自己的区域中,如下面SaveCommand所示 您希望如何设置命令 干杯, 贝里尔 这就是我所做的。。。但是,当IsDirty发生更改时,不要期望您的

这里的命令可能是Josh Smith的RelayCommand的一些变体(我把我的命令称为VmCommand),问题是ViewModel是如何创建它们的。我知道两种基本技术,第一种是在构造函数中设置所有命令属性,第二种是在属性getter中惰性地实例化命令

我更喜欢后者,因为我觉得它让我的代码更有条理,因为我通常会将与给定功能相关的所有行为包装在它自己的区域中,如下面SaveCommand所示

您希望如何设置命令

干杯,
贝里尔


这就是我所做的。。。但是,当IsDirty发生更改时,不要期望您的按钮自动启用

您需要告诉您的命令激发CanExecuteChanged并调用,否则您会发现您的按钮并不总是响应命令“可执行”状态的更改

    #region Saving

    public ICommand SaveCommand
    {
        get
        {
            return _saveCommand ?? (_saveCommand = new VmCommand
            {
                CanExecuteDelegate = x => CanSave(),
                ExecuteDelegate = x => Save()
            });
        }
    }
    private ICommand _saveCommand;

    private bool CanSave() { return IsDirty; }

    public void Save()
    {
        _facade.Save();
    }

    #endregion