0

WPF データグリッドにバインドされた ReactiveCollection があります。列の 1 つは 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 への変更に応答するボタンを取得するにはどうすればよいですか?

4

1 に答える 1

0

OK、ついに解決しました。私は 2 つの異なるアプローチを思いつきましたが、それらが最善の方法であるかどうかはわかりません。

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);
于 2012-03-01T08:47:50.793 に答える