2012-04-02 47 views
7

Tôi muốn datacontext của listview được gắn với một bộ sưu tập quan sát được. Ngay bây giờ tôi có:IQueryable <a> để ObservableCollection <a> trong đó a = anonymous type

   // CurrentEmploye = some employee 
       Entities.DatabaseModel m = new Entities.DatabaseModel(); 
       var q = from t in m.TimeSheet        
         join emp in m.Employees on t.idEmployee equals emp.id 
         where emp.id == CurrentEmploye.id 
         select new 
         { 
          firstName = emp.firstName, 
          lastName = emp.lastName, 
          position = emp.position, 
          clockInDate = t.clockInDate, 
          clockOutDate = t.clockOutDate, 
         }; 

         listView1.DataContext = q; 

mã đó điền vào chế độ xem danh sách một cách chính xác. Bây giờ tôi sẽ muốn cập nhật listview bất cứ khi nào tôi cập nhật một mục listview.

Tôi sẽ thích biến số q thuộc loại ObservableCollection mà không phải tạo lớp tùy chỉnh chứa firstName, lastName, position, v.v. Làm cách nào tôi có thể làm điều đó?

+1

tôi giả sử rằng bạn đã cố gắng 'listView1.DataContext = new ObservableCollection (q) 'và nó không hoạt động, phải không? .. – dasblinkenlight

+0

ObservableCollection mới <"need type"> (q); yêu cầu một loại và tôi không biết loại. có lẽ tôi sẽ nhận được nó với sự phản ánh. Cảm ơn đó là một bình luận hữu ích. –

+0

Ah, bạn nói đúng, tôi hoàn toàn quên rằng những gì làm việc với các phương thức không phải lúc nào cũng làm việc với các nhà xây dựng. Hãy chờ cho Jon Skeet sau đó :) – dasblinkenlight

Trả lời

14

Bạn có thể lừa gạt và tạo ra một phương pháp để làm điều đó cho bạn kể từ khi phương pháp có thể suy ra các loại generic tự động:

public ObservableCollection<T> ToObservableCollection<T>(IEnumerable<T> enumeration) 
{ 
    return new ObservableCollection<T>(enumeration); 
} 

Oh, và nếu nó giúp bạn có thể tạo này như là một phương pháp khuyến nông để nó dễ sử dụng hơn ... tùy thuộc vào bạn.

+0

+1 để đề xuất ý tưởng viết phương pháp mở rộng! – dasblinkenlight

+0

Có cách nào để làm điều đó mà không cần sử dụng generics? Ý tôi là, với mã nội tuyến và không tạo ra một loại thực. Cái gì đó như ObservableCollection ? – v1n1akabozo

1

Ngoài câu trả lời của tôi, để sử dụng nó như là một phần mở rộng, bạn nên đặt "này" trước khi tranh luận phương pháp:

public ObservableCollection<T> ToObservableCollection<T>(this IEnumerable enumeration){ return new ObservableCollection<T>(enumeration) } 
Các vấn đề liên quan