【发布时间】:2015-03-31 15:24:14
【问题描述】:
我有一个 DataGrid 显示来自 Entity Framework Code First 上下文的行。我不确定自动更新我的DataGrid 的最佳方法。
我正在打开一个新窗口,用户可以在其中添加新的Costumer,一旦用户填写表格并单击Save 按钮,窗口的ViewModel 会将Costumer 添加到@987654328 @,但是显示Costumers的DataGrid在Main Window中,由Main ViewModel控制。
我不太确定让DataGrid 显示最近添加的Costumer 的最佳方式。我只能考虑以下几种方式:
我将在
Main ViewModel中创建一个ObservableCollection<Costumer>(作为DataGrid Data Binding Source)并在Main ViewModel创建这个新窗口时将其传递给Add New Costumer ViewModel's Constructor,所以新窗口的ViewModel可以在Business Context的新实例中添加新的Costumer,也可以将Costumer添加到ObservableCollection。我可以创建一个
Business Context,其中包含一个ObservableCollection<Costumer>,并在每次运行Add Costumer方法时更新这个集合。Business Context必须是整个应用程序中的Singleton,在所有ViewModels和Main ViewModel创建的新窗口中传递。我可以在
Main ViewModel上创建一个Update Action并从每个New Window ViewModel调用这个Action。这个Action将运行一个方法来更新Main ViewModel中的ObservableCollection<Costumer>从Business Context,从而更新DataGrid。我可以为应用程序必须在
Main ViewModel上执行的每个 CRUD 操作创建一个Action或Func,因此每个新的ViewModel只需调用它,Main ViewModel将保存并更新UI 所需的所有引用。
还有其他更好的方法来实现这一点吗?我已经看到了MVVM 和Entity Framework Code First 的一些很好的例子,但是它们都没有像我的那样同时跨越多个ViewModels 的逻辑。
我倾向于为每个操作在Main ViewModel 中调用Func,我认为这种方式更清楚ViewModels 之间的依赖关系,并且所有数据操作都仅限于一个类。
【问题讨论】:
标签: wpf entity-framework mvvm datagrid ef-code-first