Prism MVVM ObservedCanExecute - Как мне вкладывать (логически и более) простые наблюдаемые свойства - PullRequest
0 голосов
/ 18 января 2020

Я довольно новичок в Prism, и мне сложно понять, как использовать ObservesCanExecute (что позволяет мне не запрашивать вручную команду для пересчета) для использования с несколькими свойствами. С одним свойством это работает как шарм! Но я хочу выполнить «и» во всех трех моих свойствах.

Вот код:

public ViewModel()
{
    MyCommand = new DelegateCommand(MyCommandHandler).ObservesCanExecute(() => BoolOne).ObservesCanExecute(() => BoolTwo).ObservesCanExecute(() => BoolThree);
}
private bool _boolOne;
public bool BoolOne
{
    get => _boolOne;
    set => SetProperty(ref _boolOne, value);
}
...

Что я испытываю, так это то, что когда BoolThree установлен в Значение true, кнопка (прикрепленная к этой команде) включена без проверки BoolOne и BoolTwo. Как я могу заставить это действовать также как предикат команды return BoolOne && BoolTwo && BoolThree

1 Ответ

1 голос
/ 30 января 2020

Здесь вы захотите использовать ObservedProperty вместо ObservedCanExecute. https://prismlibrary.com/docs/commanding.html

Не пытайтесь зарегистрировать методы ObservedCanExecute в цепочке. Для делегата CanExcute можно наблюдать только одно свойство.

При использовании метода ObservedProperty можно зарегистрировать несколько свойств в цепочке для наблюдения. Пример: ObservedProperty (() => IsEnabled) .ObservedProperty (() => CanSave).

Таким образом, вы захотите изменить свой код следующим образом:

MyCommand = new DelegateCommand(MyCommandHandler, MyCanExecuteMethod).ObservesProperty(() => BoolOne).ObservesProperty(() => BoolTwo).ObservesProperty(() => BoolThree);

private void MyCanExecuteMethod()
{
    return BoolOne && BoolTwo && BoolThree;
}

This способ, когда любое из этих свойств изменится, RaiseCanExecuteChanged будет запущен.

...