使用Reactive Bindings

时间:2016-04-15 13:35:03

标签: c# .net reactive-programming reactiveui

我是这个反应性扩展的新手,但我发现它有一些非常有用的东西。

我真正喜欢的一件事是能够将bool属性转换为在该条件下执行的命令。

例如,如果我模拟与门的交互,我将在我的视图模型中具有以下内容:

 public ReactiveProperty<bool> IsOpen{ get; }

 public ReactiveCommand<bool> SetIsLocked { get; }

然后我可以这样做:

 this.SetIsLocked = this.IsOpen.Select(isOpen => !isOpen).ToReactiveCommand<bool>(); 
 this.SetIsLocked .Subscribe(isLocked => this.Door.IsLocked = isLocked );

这会生成一个命令,每次CanExecute标志更改时都会更新IsOpen,并在调用时在我的门上设置适当的值。

但是,如果我添加另一个也是bool的旗帜,那就是这样的:

public ReactiveProperty<bool> HasLock{ get; } 

现在我想让我的命令执行,如果门有锁并关闭但我没有找到任何办法这样做。

你们中的一些人可能会说我可以通过创建另一种反应属性来实现这一点,这种反应属性将两者合并,我知道我可以让它以这种方式工作但我想知道的是,如果有办法通过合并来实现它IObservables以及类似的语法是什么。

1 个答案:

答案 0 :(得分:1)

我认为你可以像这样使用CombineLatest

SetIsLocked =
    IsOpen
    .CombineLatest(
        HasLock,
        (open,has_lock) => !open && has_lock)
    .ToReactiveCommand<bool>();