Cast LINQ result to ObservableCollection

后端 未结 6 1192
死守一世寂寞
死守一世寂寞 2020-11-29 23:55

The fact that it is a LINQ result might perhaps not be relevant for the question, but I\'m mentioning it anyway - since this is the context which has resulted in this questi

相关标签:
6条回答
  • 2020-11-30 00:01

    You need my ObservableComputations library maybe. That is .NET API for computations over INotifyPropertyChanged and INotifyColectionChanged (ObservableCollection) objects. Results of the computations are INotifyPropertyChanged and INotifyColectionChanged (ObservableCollection) objects.

    0 讨论(0)
  • 2020-11-30 00:04

    I wrote this library a few years ago.

    https://github.com/wasabii/OLinq

    It doesn't do exactly what you probably want, it does more. It's a Linq query provider which parses the expression tree, attaches to the referenced collections, and exposes another collection which emits events upon changes.

    It's missing a few Linq operators. But the code base is not hard to extend.

    0 讨论(0)
  • 2020-11-30 00:06

    You can use an ObservableCollection constructor for this:

    ObservableCollection<MyClass> obsCol = 
            new ObservableCollection<MyClass>(myIEnumerable);
    
    0 讨论(0)
  • 2020-11-30 00:06

    IEnumerable is only the interface.

    You would need to copy the content from the IEnumerable into the ObservableCollection. You can do this by passing your IEnumerable into the constructor of the ObersvableCollection when you create a new one

    0 讨论(0)
  • 2020-11-30 00:13
    var linqResults = foos.Where(f => f.Name == "Widget");
    
    var observable = new ObservableCollection<Foo>(linqResults);
    
    0 讨论(0)
  • 2020-11-30 00:18

    Just use:

    ObservableCollection<Foo> x = new ObservableCollection<Foo>(enumerable);
    

    That will do the required copying. There's no way of observing changes to the live query - although the idea of an ObservableQuery<T> is an interesting (though challenging) one.

    If you want an extension method to do this, it's simple:

    public static ObservableCollection<T> ToObservableCollection<T>
        (this IEnumerable<T> source)
    {
        if (source == null)
        {
            throw new ArgumentNullException("source");
        }
        return new ObservableCollection<T>(source);
    }
    
    0 讨论(0)
提交回复
热议问题