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?
Antworten
Zu viele Anzeigen?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.
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);
}
}
}
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
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).