【发布时间】:2017-11-09 21:32:09
【问题描述】:
我编写了一个使用 ReactiveUI 的简单 Xamarin.Android 应用: https://github.com/oscarvarto/RxCounter/blob/master/RxCounter/MainActivity.cs 思路如下:
- 在执行长时间运行的
Task(或Task<T>)期间应禁用该按钮。 - Click 应该在 ViewModel 中触发 ReactiveCommand
- ReactiveCommand 应该执行长时间运行的
Task(或Task<T>)。 见https://github.com/oscarvarto/RxCounter/blob/master/RxCounter/ClickCounterViewModel.cs#L22 - 完成
Task(或Task<T>)按钮后应重新启用。
当前代码正在运行,但我在这里依赖一个布尔标志:
https://github.com/oscarvarto/RxCounter/blob/master/RxCounter/ClickCounterViewModel.cs#L13-L18
通知按钮ViewModel.IOIntensiveCmd 完成执行的时刻。
如何在 ReactiveCommand 执行期间使用 Observables 或 ReactiveUI 机制来禁用然后启用按钮?
例如,我如何生成一个IObservable<boolean> 来切换由 ReactiveCommand 的开始/结束发出的 Button.Enabled 标志?
【问题讨论】:
-
ReactiveCommand 有一个 IObservable
IsExecuting。所以你可以简单地做 YourCommand.IsExecuting.ToProperty(this, vm => vm.IsBusy, out _isBusy)
标签: c# android xamarin xamarin.android reactiveui