【问题标题】:mvvm command setup stylesmvvm 命令设置样式
【发布时间】:2023-03-25 06:01:01
【问题描述】:

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

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

你喜欢如何设置你的命令?

干杯,
浆果

    #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

【问题讨论】:

    标签: mvvm command


    【解决方案1】:

    这就是我所做的...但是,当 IsDirty 发生变化时,不要指望您的按钮会自动启用。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-22
      • 1970-01-01
      • 1970-01-01
      • 2011-01-29
      • 1970-01-01
      相关资源
      最近更新 更多