【发布时间】:2010-02-27 19:53:29
【问题描述】:
要么我没有看到解决方案,要么我发现了使用 MVVM 的陷阱。
我有这个示例 Master-Detail:
class Customer
{
int CustomerID {get;set}
string Name {get;set}
ObservableCollection<Order> Orders {get;set}
}
class Order
{
int OrderID {get;set}
int Quantity {get;set}
double Discount {get;set}
}
假设在我的 CustomerOrdersViewModel 中,我的 ObservableCollection 客户通过 ...="{Binding Customers}" 绑定到视图,并且当客户从用户更改时,相关订单通过 ItemsSource="{Binding 显示在 DataGrid 中SelectedItem.Orders, ElementName=comboboxCustomer}"。
这可以通过 MVVM 实现:
我可以通过简单地(为简单起见)调用Customers.Add(new Customer(){...});来添加新客户。
添加后我这样做:this.RaisePropertyChanged("Customers");。这将更新视图并立即在客户组合框中显示客户。
现在是 MVVM 不可能完成的部分。
我可以通过SelectedCustomer.Orders.Add(New Order(){...});添加新订单
但我不能像以前一样在订单上引发 CollectionChanged/PropertyChanged 事件,因为订单属性未通过公共访问器绑定到视图。
即使我将 Orders 可绑定属性公开给视图,视图本身也关心 Master-Detail 切换而不是 ViewModel...
问题
如何使 Master-Detail 与 Details-List 中的 Add/Del 对象一起工作并在 View 上立即更新?
【问题讨论】:
标签: .net mvvm master-detail