5

提前致谢!

我应该如何在 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# 中的表达式。另外,我认为这对其他人会有所帮助。

4

1 回答 1

8

ObservesCanExecute()工作“大多像” 的canExecuteMethod参数DelegateCommand(Action executeMethod, Func<bool> canExecuteMethod)

但是,如果您有一个布尔属性而不是一个方法,则不需要定义一个canExecuteMethodwith ObservesCanExecute

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

然后,您可以将代码更改为,ObservesCanExecute(() => CanUpdate)并且DelegateCommand仅当CanUpdate布尔属性评估为时才会执行true(无需定义方法)。

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

于 2015-12-16T16:20:27.030 回答