C# 创建可观察的<;布尔>;从可观察到的收集

C# 创建可观察的<;布尔>;从可观察到的收集,c#,.net,system.reactive,reactive-programming,reactiveui,C#,.net,System.reactive,Reactive Programming,Reactiveui,我有ObservableCollection,我需要创建observable,如果集合包含任何元素,它将返回true 我试着这么做 var collectionHasElementsObservable = Observable.FromEventPattern<NotifyCollectionChangedEventHandler,NotifyCollectionChangedEventArgs>( ev => ((Ob

我有ObservableCollection,我需要创建observable,如果集合包含任何元素,它将返回true

我试着这么做

var collectionHasElementsObservable =
            Observable.FromEventPattern<NotifyCollectionChangedEventHandler,NotifyCollectionChangedEventArgs>(
                ev => ((ObservableCollection<MyType>)_items).CollectionChanged += ev,
                ev => ((ObservableCollection<MyType>)_items).CollectionChanged -= ev);
var CollectionHasElementsBServable=
可观察的。从事件模式(
ev=>((可观察到的收集)_项)。收集更改+=ev,
ev=>((可观察到的收集项目)。收集更改-=ev);
但我不知道如何将其转换为IObservable


如何在此基础上创建可观察事件?

您可以使用
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);
输出:

True
True
True
False

这就是您要找的吗?

我注意到您有ReactiveUI标记-如果您要使用ReactiveCollection,这将更容易:

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

谢谢你的回复。我使用了这个_bookmarks.ObserveCollectionChanged().Select(I=>_bookmarks.Any())。我有可观的收入
coll.CollectionCountChanged.Select(x => x > 0);