3

ObservableCollection<T> があり、コレクションに要素が含まれている場合に true を返す observable<bool> を作成する必要があります

私はこれをやろうとします

var collectionHasElementsObservable =
            Observable.FromEventPattern<NotifyCollectionChangedEventHandler,NotifyCollectionChangedEventArgs>(
                ev => ((ObservableCollection<MyType>)_items).CollectionChanged += ev,
                ev => ((ObservableCollection<MyType>)_items).CollectionChanged -= ev);

しかし、これを IObservable<bool> に変換する方法がわかりません

これから observable<bool> を作成するにはどうすればよいですか?

4

2 に答える 2

10

Selectイベントを次の要素のいずれかにマップするために使用できます。

        ObservableCollection<int> coll = new ObservableCollection<int>();

        var hasElements = 
        Observable.FromEventPattern<NotifyCollectionChangedEventHandler,NotifyCollectionChangedEventArgs>(
            a => coll.CollectionChanged += a,
            a => coll.CollectionChanged -= a)
        .Select(_ => coll.Count > 0);

例:

        hasElements.Subscribe(Console.WriteLine);

        coll.Add(1);
        coll.Add(2);
        coll.Remove(1);
        coll.Remove(2);

出力:

True
True
True
False

これはあなたが探していたものですか?

于 2012-11-29T15:24:39.123 に答える
8

ReactiveUI タグがあることに気付きました - ReactiveCollection を使用している場合、これはさらに簡単になります。

coll.CollectionCountChanged.Select(x => x > 0);
于 2012-11-29T18:45:25.347 に答える