2009-06-29 87 views
1

我正在努力相當長一段時間,現在將我的ListView綁定到一個表。我已經閱讀過各種解決方案,但我一直遇到麻煩。Linq-to-SQL:綁定ListView

我有2個數據庫表:Customer s和Product s。對於每個Customer,都有一個Product s的列表。

我第一次嘗試綁定到生成的Linq-to-SQL代碼。這意味着我立即綁定到Customer.Products。但是由於這是System.Data.Linq.EntitySet<Product>類型,因此當項目添加到數據庫或從數據庫中刪除項目時,我不會收到通知。

所以我通過添加一個方法延長生成的代碼Customer是包裝在一個ObservableCollection返回System.Data.Linq.EntitySet<Product>(通過各種博客爲勸)

public ObservableCollection<Product> ObservableProducts 
{ 
    get 
    { 
     return new ObservableCollection<Product>(Products); 
    } 
} 

但現在我不能給集合添加任何東西。當我打電話ObservableProducts.Add()沒有加入..

回答

2

ObservableCollection在底層集合的觀點 - 這是在自己的權利的集合。當您將List傳遞到ObservableCollection時,List中的項目將被複制到ObservableCollection

所以,你的項目被添加,但只對ObservableCollection - 不是你傳遞給它的底層List。前進

選項包括:

  • 在數據層使用的ObservableCollection。將實體列表直接轉換爲ObservableCollection,並在整個應用程序中使用該列表。
  • 聆聽ObservableCollection的更改並將這些更改應用於底層List
  • 編寫一個INotifyCollectionChanged的實現一個底層集合的視圖。這隻能單向運行(OC-> List但不是List-> OC),如果你有一個多線程的應用程序會變得棘手。