【问题标题】:ReactiveUI toggle button bindingReactiveUI 切换按钮绑定
【发布时间】:2017-11-27 04:36:34
【问题描述】:

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

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

【问题讨论】:

    标签: reactiveui


    【解决方案1】:

    当我最后一次不得不解决这个问题时,我最终像这样使用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

    【讨论】:

      猜你喜欢
      • 2023-03-20
      • 2016-03-21
      • 2017-09-04
      • 1970-01-01
      • 2015-06-22
      • 2023-03-05
      • 1970-01-01
      • 2017-06-18
      • 2014-05-02
      相关资源
      最近更新 更多