从observablecollection </bool>创建observable <bool>

时间:2012-11-29 08:36:06

标签: c# .net system.reactive reactive-programming reactiveui

我有ObservableCollection&lt; T&gt;我需要创建observable&lt; bool&gt;如果集合包含任何元素,则返回true

我尝试这样做

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

但我不知道如何将其转换为IObservable&lt; bool&gt;

如何创建observable&lt; bool&gt;从这个?

2 个答案:

答案 0 :(得分: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

这是你在找什么?

答案 1 :(得分:8)

我注意到你有ReactiveUI标签 - 如果你要使用ReactiveCollection,这会更容易:

coll.CollectionCountChanged.Select(x => x > 0);