2010-07-15 14 views
5

En mi aplicación WPF me gustaría utilizar LINQ tanto como sea posible (especialmente para evitar foreach). Pero WPF trabaja mucho con ObservableCollection, y no puedo usar LINQ con este tipo de colección. ¿Que puedo hacer?WPF LINQ y ObservableCollection

Respuesta

8

¿Qué le hace pensar que no puede usar LINQ con ObservableCollection<T>? Implementa Collection<T> por lo que debería estar bien.

Por ejemplo:

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

class Test 
{ 
    static void Main() 
    { 
     var collection = new ObservableCollection<int>() 
     { 
      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); 
     } 
    } 
} 
+0

Gracias. Lo siento. Recuerdo que había problemas con algunas consultas, pero ahora lo he intentado y todo funciona. – lamarmora

+1

La consulta resultante es un IEnumerable. ¿Hay una forma clara de volver a un ObservableCollection ? – tofutim

+0

@tofutim: No, hasta donde sé, me temo. –

13

Sólo por cualquier otra persona que puede venir a través de este problema con tratar de filtrar una ObservableCollection pero descubren que no pueden.

Jon tiene toda la razón en que no hay ninguna razón por la que no puedas hacer esto, pero la clave para un novato o alguien que ha estado desarrollando con WPF por un tiempo es que debes incluir el "utilizando System.Linq; " espacio de nombres. Tan pronto como hagas esto, puedes hacer una consulta ".where" en tu objeto.

+0

Esto es cierto, y funcionó para mí. – dev1998

+0

¡Gracias por la respuesta adicional! * Ese * fue mi problema :) – derekantrican

+1

El ObservableCollection resultante no se actualizará si la actualización del resultado de la consulta es consecuencia de la fuente subyacente que se está actualizando. – Tormod

0

El OP pidió especialmente el método LINQ ".ForEach()", que no se puede usar en ObservableCollection < T>, ya que está implementado para la Lista < T> solamente.

Hay otro SO-Tema, donde encontré mi solución: https://stackoverflow.com/a/200584/2408978

Cuestiones relacionadas