2014-01-23 42 views
7

我正在嘗試第一次使用WhenAnyObservable。ReactiveUI如何正確使用WhenAnyObservable

當一個ReactiveList計數== 0和一個tipText長度> 0時,我想在訂閱中設置一個本地值爲true,或者相反。

 this.ViewModel.WhenAnyObservable(
      x => x.AutoCompleteItems.CountChanged, 
      x => x.ObservableForProperty(y => y.TipText), 
      (countChanged, tipText) => countChanged == 0 && tipText.Length > 0); 

我無法正常工作。

有沒有我應該做的技巧,或者我應該使用其他的WhenAny命令之一嗎?

回答

4

你有正確的想法,但如果使用> 1 Observables,則WhenAnyObservable只有在「雙方」具有初始項時纔會返回項目。所以你可能想要:

this.ViewModel.WhenAnyObservable(
    x => x.AutoCompleteItems.CountChanged.StartWith(0), 
    x => x.WhenAnyValue(y => y.TipText), 
    (countChanged, tipText) => countChanged == 0 && tipText.Length > 0); 
+2

我沒有看到那個來保羅 - 我一直有問題WhenAnyObservable(意外) - 但是不是那種反直覺?如果它被稱爲'當*任何*'。我覺得我必須經常停下來檢查RxUI源代碼。我不抱怨,你做了很棒的工作。並且Observable可以對代碼執行此操作 – NSGaga

+0

System.NotSupportedException:只有常量支持索引表達式。 – Den

0

當試圖使用WhenAnyObservable時,我得到一個索引錯誤。我結束了使用

Observable.CombineLatest(
    SomeItems.Changed.Select(x => true), 
    this.WhenAnyValue(y => y.SomeBoolProperty), 
    (b,g) => b && g)