2011-03-13 50 views
1

我正在檢索簡單的LINQ查詢,但我正在使用兩個表和綁定數據與ListBox進行連接。 我無法正確顯示項目到列表框中。將數據綁定到Silverlight中的LINQ查詢結果

一旦我刪除新項目,並選擇只有關鍵字使用它將正常工作,但我想連接兩個表與選擇新的關鍵詞它不會允許與ListBox綁定數據。 我的代碼就像。 這將不允許與ListBox綁定。

var newPeople = (from p in clsGeneral.db.Table<SmartFXAttribes>() 
       join q in clsGeneral.db.Table<CategoryAttribes>() on p.catId equals q.ID 
       where p.catId == ((SmartFX.CategoryAttribes)((ComboBox)cmbPrintSize).SelectedValue).ID 
       select new 
       { 
        p.ID, 
        p.ImageHeight, 
        p.Imageoutline, 
        p.ImageUnit, 
        p.ImageWidth, 
        p.NoofPic, 
        p.TextboxCaption, 
        p.CanvasPixelHeight, 
        p.CanvasPixelWidth, 
        p.CanvasUnit, 
        p.catId, 
        q.FileName 
       }).ToList(); 
lstThumbnail.ItemsSource = newPeople; 

此代碼將正常工作。

var newPeople = 
    (from p in clsGeneral.db.Table<SmartFXAttribes>() 
    join q in clsGeneral.db.Table<CategoryAttribes>() on p.catId equals q.ID 
    where p.catId == ((SmartFX.CategoryAttribes)((ComboBox)cmbPrintSize).SelectedValue).ID 
    select p).ToList(); 

lstThumbnail.ItemsSource = newPeople; 

謝謝!

回答

1

問題是第一個查詢創建了一個匿名類型的對象,但Silverlight無法對匿名類型的對象進行數據綁定(匿名類型是內部的,而Silverlight的反射功能不允許從其他程序集訪問內部類型)。你的第二個查詢返回一個指定類型的對象,所以它工作得很好。

對此的最佳解決方案是聲明一個包含公共屬性的公共屬性,用於您希望從第一個查詢返回的所有內容,並返回該實例。

但是,您可以使用this hack解決此問題。

+0

是否由Silverlight的設計?衆所周知的限制? – abatishchev

相關問題