ReactiveUI切换按钮绑定

时间:2017-11-26 17:27:01

标签: reactiveui

是否可以将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));

有什么想法吗?非常感谢。

1 个答案:

答案 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