12 Stimmen

WPF LINQ und die ObservableCollection

In meiner WPF-Anwendung möchte ich so weit wie möglich LINQ verwenden (insbesondere um foreach zu vermeiden). Aber WPF arbeitet viel mit der ObservableCollection, und ich kann LINQ nicht mit dieser Art von Sammlung verwenden. Was kann ich tun?

18voto

Mark P Punkte 191

Nur für alle anderen, die auf dieses Problem stoßen könnten, beim Versuch, eine ObservableCollection zu filtern, aber feststellen, dass sie es nicht können.

Jon hat absolut recht damit, dass es keinen Grund gibt, warum man das nicht tun kann, aber das Wichtigste für einen Neuling oder für jemanden, der schon eine Weile mit WPF entwickelt, ist, dass man den "using System.Linq;" Namespace einbeziehen muss. Sobald du das tust, kannst du eine ".where" Abfrage auf dein Objekt durchführen.

13voto

Jon Skeet Punkte 1325502

Was lässt Sie denken, dass Sie LINQ nicht mit ObservableCollection verwenden können? Sie implementiert Collection, also sollte es funktionieren.

Zum Beispiel:

using System;
using System.Collections.ObjectModel;
using System.Linq;

class Test
{
    static void Main()
    {
        var collection = new ObservableCollection()
        {
            1, 2, 3, 6, 8, 2, 4, 5, 3
        };

        var query = collection.Where(x => x % 2 == 0);
        foreach (int x in query)
        {
            Console.WriteLine(x);
        }
    }
}

1voto

dba Punkte 1059

Der OP hat insbesondere nach der LINQ ".ForEach()" Methode gefragt, die nicht auf ObservableCollection< T > verwendet werden kann, da sie nur für List< T > implementiert ist.

Es gibt ein weiteres SO-Thema, wo ich meine Lösung gefunden habe: https://stackoverflow.com/a/200584/2408978

0voto

Igor Buchelnikov Punkte 408

Sie benötigen möglicherweise meine ObservableComputations Bibliothek. Dies ist eine .NET-API, die speziell für die Arbeit mit LINQ-ähnlichen Abfragen für ObservableCollection in WPF und anderen .NET-UI-Frameworks entwickelt wurde, die das Binden an INotifyCollectionChanged und INotifyPropertyChanged-Objekte unterstützen (Xamarin, Blazor).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X