2014-01-23 41 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)