如何让ReativeCommand获取最新的CanExecute值?

时间:2012-03-01 05:50:08

标签: wpf mvvm reactiveui

我有一个绑定到WPF数据网格的ReactiveCollection。其中一列是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,所以我假设所有内容都应该自动触发。)

如何让按钮响应ReactiveCollection中对ReactiveObjects的更改?

1 个答案:

答案 0 :(得分:0)

好的,终于解决了。我提出了两种不同的方法,但我不确定它们是否是最好的方法。

第一个使用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);