tak*_*shi 3 .net c# reactive-programming system.reactive reactiveui
我有ObservableCollection <T>,我需要创建observable <bool>,如果collection包含任何元素,则返回true
我试着这样做
var collectionHasElementsObservable =
Observable.FromEventPattern<NotifyCollectionChangedEventHandler,NotifyCollectionChangedEventArgs>(
ev => ((ObservableCollection<MyType>)_items).CollectionChanged += ev,
ev => ((ObservableCollection<MyType>)_items).CollectionChanged -= ev);
Run Code Online (Sandbox Code Playgroud)
但我不知道如何将其转换为IObservable <bool>
如何从中创建可观察的<bool>?
Ast*_*sti 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);
Run Code Online (Sandbox Code Playgroud)
例:
hasElements.Subscribe(Console.WriteLine);
coll.Add(1);
coll.Add(2);
coll.Remove(1);
coll.Remove(2);
Run Code Online (Sandbox Code Playgroud)
输出:
True
True
True
False
Run Code Online (Sandbox Code Playgroud)
这是你在找什么?
我注意到你有ReactiveUI标签 - 你是否使用ReactiveCollection,这将更容易:
coll.CollectionCountChanged.Select(x => x > 0);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1463 次 |
| 最近记录: |