我有ObservableCollection< T>我需要创建observable< bool>如果集合包含任何元素,则返回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;从这个?
答案 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);