2017-11-26 21 views
0

WPF ToggleButtonをReactiveUIコマンドのペアにバインドすることはできますか?ReactiveUIボタンバインディングの切り替え

私は、他の観測可能なティックがあるときに、ある観測可能なものを取り消すRxパターンを使用しています。したがって、Connectコマンドをトグルするにはトグルをオンにし、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)); 

任意のアイデア?どうもありがとう。私が最後にこの問題を解決しなければならなかったとき、私はこのようなInvokeCommandを使用して終了

答えて

3

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は、コマンドの中に、観察の値を渡しますので、私たちはにSelect変更に値を使用する必要がありますa Unit