gpt4 book ai didi

c# - 如何让 Reactive Commands 观察它们自己的 IsExecuting observable

转载 作者:太空狗 更新时间:2023-10-29 22:37:20 25 4
gpt4 key购买 nike

我的 ViewModel 中有几个命令,我希望将每个按钮的 CanExecute 绑定(bind)到一个可观察到的繁忙状态,该状态被定义为当前没有任何按钮正在执行。

以下是我想出的,但显然它遇到了 NullReferenceException。

busy = Observable.CombineLatest(this.PlayCommand.IsExecuting, this.PauseCommand.IsExecuting, (play, pause) => play && pause);

this.PauseCommand = new ReactiveCommand(busy.Select(b => !b));
this.PlayCommand = new ReactiveCommand(busy.Select(b=> !b));

此外,ReactiveCommand 上的 CanExecuteObservable 属性是只读的,因此我需要在初始化命令之前定义一个 IObservable。

关于如何解决这个先有鸡还是先有蛋的问题有什么想法吗?观察 ViewModel(或 ViewModel 的集合)的繁忙状态的更好方法也将受到赞赏:-)

最佳答案

我会通过使用主题来设置代理:

var areAllAvailable = new BehaviorSubject<bool>(true);

PauseCommand = new ReactiveCommand(areAllAvailable);
PlayCommand = new ReactiveCommand(areAllAvailable);

Observable.CombineLatest(PauseCommand.IsExecuting, PlayCommand.IsExecuting,
(pa,pl) => !(pa || pl))
.Subscribe(allAreAvailable);

关于c# - 如何让 Reactive Commands 观察它们自己的 IsExecuting observable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23322942/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com