Как заставить ReativeCommand получить последнее значение CanExecute?

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

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

То, что я пытаюсь сделать, это включить кнопку только в том случае, если все флажки отмечены галочкой.

        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?


person ckoo    schedule 01.03.2012    source источник


Ответы (1)


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

Первый использует событие 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);
person ckoo    schedule 01.03.2012