8

I am attempting to use WhenAnyObservable for the first time.

When a ReactiveList Count == 0 and a tipText length is > 0 then I want to set a local value to true in the subscribe, or the opposite.

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

I am having trouble getting this to work.

Is there any trick I should be doing, or should I be using one of the other WhenAny commands?

Glenn Watson
  • 2,758
  • 1
  • 20
  • 30

2 Answers2

5

You've got the right idea, but WhenAnyObservable doesn't return items until it has an initial item for both "sides" if you use >1 Observables. So you probably want:

this.ViewModel.WhenAnyObservable(
    x => x.AutoCompleteItems.CountChanged.StartWith(0),
    x => x.WhenAnyValue(y => y.TipText),
    (countChanged, tipText) => countChanged == 0 && tipText.Length > 0);
Ana Betts
  • 73,868
  • 16
  • 141
  • 209
  • 2
    I didn't see that one coming Paul - I've been having trouble with WhenAnyObservable (unexpected) - but isn't that sort of counter-intuitive ? If it's called 'When*Any*'. I feel like I have to get down and check the RxUI source code every so often. And I'm not complaining, you did great work with it. And Observables can do this to a code – NSGaga-mostly-inactive Mar 16 '16 at 01:14
  • 3
    System.NotSupportedException: Index expressions are only supported with constants. – Den Jun 01 '16 at 16:29
3

I get an index error when trying to use WhenAnyObservable. I ended up using

Observable.CombineLatest(
    SomeItems.Changed.Select(x => true),
    this.WhenAnyValue(y => y.SomeBoolProperty),
    (b,g) => b && g)
Post Impatica
  • 14,999
  • 9
  • 67
  • 78