Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 如何获取CreateCommand以获取最新的CanExecute值?_Wpf_Mvvm_Reactiveui - Fatal编程技术网

Wpf 如何获取CreateCommand以获取最新的CanExecute值?

Wpf 如何获取CreateCommand以获取最新的CanExecute值?,wpf,mvvm,reactiveui,Wpf,Mvvm,Reactiveui,我有一个绑定到WPF数据网格的ReactiveCollection。其中一列是复选框列 WPF表单有一个绑定到ReactiveCommand的按钮 我想做的只是在所有复选框都勾选的情况下启用按钮 var canHitContinueButton = this.WhenAny( x => x.MyCollection, ticks => ticks.Value.All(y => y.IsSelected)); Continue = new Rea

我有一个绑定到WPF数据网格的ReactiveCollection。其中一列是复选框列

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

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

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