是否可以将WPF ToggleButton绑定到一对ReactiveUI命令?
我使用Rx模式取消一个可观察到的其他可观察的滴答声。因此,我希望切换为ON以触发Connect
命令,并且切换为OFF以触发Disconnect
命令。
Connect = ReactiveCommand
.CreateFromObservable(() => app.Connection
.TakeUntil(Disconnect),
outputScheduler: schedulerProvider.MainThread);
Disconnect = ReactiveCommand.Create(
() => { },
Connect.IsExecuting);
View.xaml
<ToggleButton Name="Toggle" />
View.xaml.cs ..不确定这应该如何工作......
d(this.BindCommand(ViewModel, x => x.Connect, x => x.Toggle));
d(this.BindCommand(ViewModel, x => x.Disconnect, x => x.Toggle));
有什么想法吗?非常感谢。
答案 0 :(得分:3)
当我最后一次解决这个问题时,我最终使用InvokeCommand
这样:
d(this.Bind(ViewModel, vm => vm.IsConnected, v => v.Toggle.IsChecked));
d(ViewModel
.WhenAnyValue(vm => vm.IsConnected)
.Where(value => value == true)
.Select(_ => Unit.Default)
.InvokeCommand(ViewModel.Connect));
d(ViewModel
.WhenAnyValue(vm => vm.IsConnected)
.Where(value => value == false)
.Select(_ => Unit.Default)
.InvokeCommand(ViewModel.Disconnect));
InvokeCommand
将observable的值传递给命令,因此我们需要使用Select
将值更改为Unit
。