2010-07-15 27 views
5

Trong ứng dụng WPF của tôi, tôi muốn sử dụng LINQ càng nhiều càng tốt (đặc biệt là để tránh foreach). Nhưng WPF làm việc rất nhiều với ObservableCollection, và tôi không thể sử dụng LINQ với các loại bộ sưu tập. Tôi có thể làm gì?WPF LINQ và ObservableCollection

Trả lời

8

Điều gì khiến bạn nghĩ rằng bạn không thể sử dụng LINQ với ObservableCollection<T>? Nó thực hiện Collection<T> vì vậy nó sẽ được sử dụng tốt.

Ví dụ:

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

Cảm ơn bạn. Lấy làm tiếc. Tôi nhớ đã có vấn đề với một số truy vấn, nhưng bây giờ tôi đã thử và mọi thứ hoạt động. – lamarmora

+1

Truy vấn kết quả là một IEnumerable. Có cách nào sạch sẽ để quay trở lại ObservableCollection không? – tofutim

+0

@tofutim: Không, không xa như tôi biết tôi sợ. –

13

Chỉ cần cho bất kỳ ai khác, người có thể đi qua vấn đề này với cố gắng để lọc một ObservableCollection nhưng thấy rằng họ không thể.

Jon hoàn toàn chính xác ở chỗ không có lý do gì bạn không thể làm điều này nhưng điều quan trọng đối với người mới hoặc người đã phát triển với WPF trong một thời gian là bạn cần bao gồm "" sử dụng System.Linq; " không gian tên. Khi bạn thực hiện việc này, bạn có thể thực hiện truy vấn ".where" trên đối tượng của mình.

+0

Điều này đúng, và nó hiệu quả với tôi. – dev1998

+0

Cảm ơn câu trả lời bổ sung! * Đó là vấn đề của tôi :) – derekantrican

+1

Kết quả ObservableCollection sẽ không cập nhật nếu cập nhật kết quả truy vấn là hậu quả của nguồn cơ bản đang được cập nhật. – Tormod

0

OP được hỏi đặc biệt cho phương thức LINQ ".ForEach()", không thể sử dụng trên ObservableCollection < T>, vì nó được triển khai cho Danh sách < T>.

Có một chủ đề khác, nơi tôi tìm thấy giải pháp của mình: https://stackoverflow.com/a/200584/2408978

Các vấn đề liên quan