2012-03-01 16 views
0

我有一個綁定到WPF數據網格的ReactiveCollection。其中一列是checkBox列。如何獲取ReativeCommand以獲取最新的CanExecute值?

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的更改?

回答

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);