Как получить ReativeCommand, чтобы получить последнее значение CanExecute? - PullRequest
0 голосов
/ 01 марта 2012

У меня есть ReactiveCollection, которая связана с сеткой данных WPF.Один из столбцов - это столбец checkBox.

В форме WPF есть кнопка, связанная с ReactiveCommand.

Я пытаюсь лишь включить эту кнопку, если все флажки установлены.ticked.

        var canHitContinueButton = this.WhenAny( x => x.MyCollection, ticks => ticks.Value.All(y => y.IsSelected));

        Continue = new ReactiveCommand(canHitContinueButton);

        Continue.Subscribe( doSomething => ());

Кажется, что ReactiveCommand проверяет значение только при его создании, но не перепроверяет значение при изменении элементов в ReactiveCollection.(Элементы в ReactiveCollection являются ReactiveObjects, поэтому я предположил, что все должно запускаться автоматически.)

Как получить кнопку, чтобы реагировать на изменения в ReactiveObjects в ReactiveCollection?

1 Ответ

0 голосов
/ 01 марта 2012

ОК, наконец-то все получилось.Я предложил два разных подхода, но не уверен, что это лучший способ для этого.

Первый использует событие ReactiveCollection.Changed:

CanHitToggleButton = Customers.Changed.Select( _ => Customers.All(x => x.IsSelected)).StartWith(false);

Это решение можетбыть дорогостоящим, поскольку предикат выполняется каждый раз при изменении коллекции независимо от того, связано ли изменение с флажком или нет.

Другое решение срабатывает только при изменении значения флажка.

CanHitToggleButton = Customers.ItemChanged.Where(x => x.PropertyName == "IsSelected").Select(_ => Customers.All(x => x.IsSelected)).StartWith(false);
...