2012-04-02 14 views
7

Chcę, aby datacontext mojego listview był powiązany z obserwowalną kolekcją. W tej chwili mam:IQueryable <a> do ObservableCollection <a> gdzie a = anonimowy typ

   // 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; 

że kod poprawnie wypełnia listę. Teraz chciałbym zaktualizować listview za każdym razem, gdy aktualizuję element listview.

Chciałbym, aby zmienna q była typu ObservableCollection bez konieczności tworzenia niestandardowej klasy, która zawiera imię, nazwisko, stanowisko itp. ... Jak mogę to zrobić?

+1

Zakładam, że próbował 'listView1.DataContext = new ObservableCollection (q) 'i to nie zadziałało, prawda? .. – dasblinkenlight

+0

nowa ObservableCollection <"need type"> (q); wymaga typu i nie znam typu. może dostanę to z refleksją. Dzięki, że był to pomocny komentarz. –

+0

Ach, masz rację, całkowicie zapomniałem, że to, co działa z metodami, nie zawsze działa z konstruktorami. Poczekajmy więc na Jona Skeeta :) – dasblinkenlight

Odpowiedz

14

można oszukać i stworzyć metodę, aby to zrobić dla Ciebie, ponieważ metody można wywnioskować typ rodzajowy się automatycznie:

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

Aha, i czy to pomaga można utworzyć to jako metodę rozszerzenia tak jest łatwiejszy w użyciu ... do ciebie.

+0

+1 za sugerowanie pomysłu napisania metody rozszerzenia! – dasblinkenlight

+0

Czy istnieje sposób, aby to zrobić bez użycia generycznych? Mam na myśli, z wbudowanym kodem i bez tworzenia prawdziwego typu. Coś takiego jak ObservableCollection ? – v1n1akabozo

1

Poza moją odpowiedź, w celu wykorzystania go jako rozszerzenie należy umieścić „to” przed argumentem metoda:

public ObservableCollection<T> ToObservableCollection<T>(this IEnumerable enumeration){ return new ObservableCollection<T>(enumeration) } 
Powiązane problemy