어리석은 질문에 대해 사과 합니다만 이것이 WPF 및 Entity Framework에 대한 나의 첫 번째 접근 방식입니다. EntityFramework WPF ObservableCollection에서 master-detail 항목을 업데이트하십시오.
의 내 시나리오를 설명하게
...나는 나의 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 바인딩으로 지정되어 있지 않으므로 목록에 값/개체가 채워지지만 목록에 대한 변경 내용은 원본으로 다시 푸시되지 않습니다. 소스로 독점적으로 작업하면이를 완화하고 모든 상호 작용을 한 곳에서 처리 할 수 있습니다. – CodeWarrior