2016-04-15 36 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

不客氣 –