2012-04-02 23 views
7

Desidero che il datacontext della mia listview venga associato a una raccolta osservabile. In questo momento ho:IQueryable <a> a ObservableCollection <a> dove a = tipo anonimo

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

tale codice popola correttamente il listview. Ora mi piacerebbe aggiornare la listview ogni volta che aggiorno un oggetto listview.

Mi piacerebbe che la variabile q sia di tipo ObservableCollection senza dover creare una classe personalizzata che contiene firstName, lastName, posizione, ecc ... Come posso farlo?

+1

Suppongo che si è tentato 'listView1.DataContext = new ObservableCollection (q) 'e non ha funzionato, giusto? .. – dasblinkenlight

+0

new ObservableCollection <"need type"> (q); richiede un tipo e non conosco il tipo. forse lo prenderò con la riflessione. Grazie è stato un commento utile. –

+0

Ah, hai ragione, ho completamente dimenticato che ciò che funziona con i metodi non sempre funziona con i costruttori. Aspettiamo quindi Jon Skeet :) – dasblinkenlight

risposta

14

Si può imbrogliare e creare un metodo per farlo per voi dal momento che i metodi possono dedurre il tipo generico automaticamente:

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

Oh, e se vi aiuta a creare questo come un metodo di estensione in modo è più facile da usare ... fino a te.

+0

+1 per suggerire un'idea di scrivere un metodo di estensione! – dasblinkenlight

+0

C'è un modo per farlo senza usare i farmaci generici? Voglio dire, con il codice inline e senza creare un tipo reale. Qualcosa come ObservableCollection ? – v1n1akabozo

1

Oltre alla mia risposta, al fine di utilizzarlo come estensione si dovrebbe mettere "questo" prima che il metodo di ragionamento:

public ObservableCollection<T> ToObservableCollection<T>(this IEnumerable enumeration){ return new ObservableCollection<T>(enumeration) } 
Problemi correlati