2012-04-02 228 views
7

我希望將listview的datacontext綁定到可觀察集合。現在我有:IQueryable <a> to ObservableCollection <a>其中a =匿名類型

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

該代碼正確填充listview。現在我想更新listview項目時更新列表視圖。

我希望變量q的類型爲ObservableCollection,而不必創建一個自定義類來保存firstName,lastName,position等等......我該怎麼做?

+1

我假設你試過'listView1.DataContext =新的ObservableCollection(Q) '並且它沒有工作,對吧? – dasblinkenlight 2012-04-02 22:20:44

+0

新的ObservableCollection <"need type">(q);需要一個類型,我不知道類型。也許我會反思。謝謝,這是一個有用的評論。 – 2012-04-02 22:24:55

+0

啊,你是對的,我完全忘記了方法的作用並不總是與構造函數一起工作。讓我們等待Jon Skeet :) – dasblinkenlight 2012-04-02 22:26:11

回答

14

你可以欺騙,並創建爲你做它,因爲方法可以推斷自動泛型類型的方法:

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

哦,如果它可以幫助您可以創建此作爲一個擴展方法,以便使用起來更容易......取決於你。

+0

+1用於暗示撰寫擴展方法的想法! – dasblinkenlight 2012-04-02 22:40:15

+0

有沒有辦法做到這一點,而不使用泛型?我的意思是,使用內聯代碼而不創建實際類型。就像ObservableCollection ? – v1n1akabozo 2016-06-12 16:19:49

1

除了我的答案,爲了使用它作爲一個擴展,你應該把「本」的方法參數前:

public ObservableCollection<T> ToObservableCollection<T>(this IEnumerable enumeration){ return new ObservableCollection<T>(enumeration) } 
相關問題