从observablecollection创建observable <bool>

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)

这是你在找什么?


Ana*_*tts 8

我注意到你有ReactiveUI标签 - 你是否使用ReactiveCollection,这将更容易:

coll.CollectionCountChanged.Select(x => x > 0);
Run Code Online (Sandbox Code Playgroud)