C# 创建可观察的<;布尔>;从可观察到的收集
我有ObservableCollection,我需要创建observable,如果集合包含任何元素,它将返回true 我试着这么做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
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);