WPF PRISM 6 DelegateComand ObservesCanExecute

WPF PRISM 6 DelegateComand ObservesCanExecute

提前致谢!

PRISM 6 的DelegateCommand 中ObservesCanExecute 应该如何使用?

public partial class  UserAccountsViewModel: INotifyPropertyChanged
{
    public DelegateCommand InsertCommand { get; private set; }
    public DelegateCommand UpdateCommand { get; private set; }
    public DelegateCommand DeleteCommand { get; private set; }

    public UserAccount SelectedUserAccount
    {
        get;
        set
        {
            //notify property changed stuff
        }
    }

    public UserAccountsViewModel()
    {
        InitCommands();
    }

    private void InitCommands()
    {
        InsertCommand = new DelegateCommand(Insert, CanInsert);  
        UpdateCommand = new DelegateCommand(Update,CanUpdate).ObservesCanExecute(); // ???
        DeleteCommand = new DelegateCommand(Delete,CanDelete);
    }

    //----------------------------------------------------------

    private void Update()
    {
        //...
    }

    private bool CanUpdate()
    {
        return SelectedUserAccount != null;
    }

    //.....
}

不幸的是,我不熟悉 c# 中的表达式。另外,我认为这会对其他人有所帮助。

ObservesCanExecute() 的工作方式“很像”DelegateCommand(Action executeMethod, Func<bool> canExecuteMethod)canExecuteMethod 参数。

但是,如果您有 布尔值 属性 而不是 方法 ,则不需要定义canExecuteMethodObservesCanExecute.

在您的示例中,假设 CanUpdate 不是 方法 ,只是假设它是 布尔值 属性.

然后你可以将代码更改为 ObservesCanExecute(() => CanUpdate) 并且只有当 CanUpdate 布尔值 属性 计算为 trueDelegateCommand 才会执行(不需要定义一个方法)。

ObservesCanExecute 就像 属性 上的“快捷方式”,而不是必须定义一个方法并将其传递给 DelegateCommand 构造函数的 canExecuteMethod 参数.