2016-04-15 39 views
1

我刚接触到这个被动扩展的东西,但我看到它有一些非常有用的东西。将2个反应性属性组合成具有反应性绑定的反应性命令

我真正喜欢的东西之一是能够将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); 

这会生成一个命令,每次更新它的时候都会更新它的标志更改,并将在呼叫时在我的门上设置适当的值。

但如果我添加另一个标志,这也是一个布尔值,saay是这样的:

public ReactiveProperty<bool> HasLock{ get; } 

现在我想我的命令来执行,如果门口有一个锁,被关闭,但我没有找到了任何方式来做到这一点。

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

+0

是否使用了[ReactiveProperty(https://www.nuget.org/packages/ReactiveProperty/)NuGet包? –

+0

是的,这就是我们正在使用的。版本2.4.2 –

回答

1

我认为你可以使用CombineLatest这样的:

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

是的,就像一个魅力。谢谢你。 –

+0

不客气 –