愚かな質問を申し訳ありませんが、これはWPFとEntity Frameworkで初めてのアプローチです。EntityFrameworkでWPF ObservableCollectionのマスターディテールアイテムを更新する
は、私は両方の私のEFコンテキストで、マスタークラス(お客様)とディテールクラス(受注)を持っている
...さんは私のシナリオを説明しましょう。 マスタクラスをLINQ-to-EFクエリ(Ordersを含む)でロードし、ListBoxのソースとして使用されるObservableCollectionにIEnumerable結果セットを格納します。
次に、私は注文を読み込むDataGridを持っています。 マスターアイテムはObservableCollection内にあるので、アイテムを追加、削除、更新することができ、ListBoxに自動的に反映されます。 問題は、顧客に注文を追加する必要がある場合です。
コンテキストからすべてのアイテムを再ロードせずにObservableCollection内のアイテムのみを更新する方法はありますか?
これが問題の一部は手動で注文に関連(外部キー)プロパティを設定することができる私のコード(簡体字)事前に
// Loading Customers
EntitiesContext context = new EntitiesContext();
IEnumerable<Customer> customers = from c in context.Customer.Include("Orders")
select c;
ObservableCollection<Customer> oc = new ObservableCollection<Customer>(customers);
// Binding ListBox
listCustomers.ItemsSource = oc;
...
// Retrieving a Customer (1st for instance...)
Customer c = (listCustomers.Items[0] as Customer);
Order o = new Order {Customer = c.ID, Item = "xxx"};
context.AddToOrders(o);
// How can I update the ObservableCollection?
おかげで、
マヌエル
あなたの答えをありがとう!そうしたやり方で私は顧客に注文を追加するだけですが、私はObservableCollectionを更新しません。 – Flea777
問題ありません。これが回答として機能する場合は、投票してください。答えとしてマークしてください。 – CodeWarrior
Listと対話する代わりに、ObservableCollectionと対話することが最善です。次のようなことを試してください:oc [0] .Orders.Add(o);.リストがバインドされていると思いますが、TwoWayバインディングとして指定されていないため、リストには値/オブジェクトが設定されていますが、リストへの変更は元に戻されません。ソースと独占して作業することで、それを軽減し、すべての対話を1か所で行うことができます。 – CodeWarrior