2009-06-29 19 views
1

テーブルに私のListViewをバインドして、今かなりの間苦労しています。私はいろいろな解決策を読んだが、問題は続いている。Linq-to-SQL:バインディングリストビュー

CustomerProductの2つのデータベーステーブルがあります。それぞれCustomerにはProductのリストがあります。

私の最初の試みでは、生成されたLinq-to-SQLコードにバインドします。それは私がすぐにCustomer.Productsにバインドすることを意味します。しかし、これはタイプがSystem.Data.Linq.EntitySet<Product>なので、アイテムがデータベースに追加/削除されたときには通知されません。

は、だから私は、(様々なブログでadvicedとして) ObservableCollectionで返さ System.Data.Linq.EntitySet<Product>をラップ Customer

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

にメソッドを追加することによって生成されたコードを拡張しかし、今、私はコレクションに何かを追加することはできません。私はObservableProducts.Add()何も追加されません呼び出すとき..

答えて

2

ObservableCollection基になるコレクションのビューではありません - それは、それ自体で集めたものです。 ListObservableCollectionに渡すと、Listの項目はObservableCollectionにコピーされます。

だからあなたの項目あるは、だけObservableCollectionに追加されている - あなたはそれに渡されていない基礎となるListを。前進のための

のオプションが含まれます:あなたのデータ層でObservableCollectionを使用して

  • 。エンティティリストをObservableCollectionに直ちに変換して、アプリケーション全体でそれを使用します。
  • ObservableCollectionへの変更をリッスンし、それらの変更を基になるListに適用します。
  • INotifyCollectionChangedの実装を書くと、となります。基になるコレクションのビュー。これは単方向(OC-> ListではなくList-> OC)でしか動作せず、マルチスレッドアプリケーションを使用している場合は面倒です。