MVVM:沟通

kat*_*e77 5 wpf mvvm mvvm-light

我正在开发一个大型MVVM应用程序.我正在使用MVVM light工具包.该应用程序就像一个带有后退和前进按钮的Web浏览器.主视图是用户控件.我在主视图用户控件中放置了后退和前进按钮.主视图又具有用户控件.单击后退和前进按钮时,用户控制更改.主ViewModel跟踪当前用户控件并根据按钮单击加载下一个用户控件.

根据第一步中的选择(ID)加载所有这些用户控件.可以说,主视图是一个搜索屏幕,我们选择一个客户.接下来的屏幕将是地址,账单,请求等.这些屏幕不共享任何数据.但数据是针对同一客户的.

那么,在主视图中存储客户ID是一种很好的做法吗?如果我这样做,我应该有一个绑定到命令的UserControl_Loaded事件,然后我会请求地址和账单信息.

或者我可以将按钮(后退和前进按钮)移动到每个用户控件而不是主视图,将客户ID传递给将加载下一个视图的消息.

哪个更好?

Rob*_*ney 4

我过去完成此类事情的一种方法是实现一个封装操作数据上下文的类。所有页面都将填充(并更新)此类的属性。主视图模型创建此类的实例和页面视图模型的集合,为每个模型提供数据上下文。它还处理从一个页面到另一个页面的导航,实现CurrentPageNavigateForwardCommandNavigateBackwardCommand属性。

如果用户返回到第 1 页并更改客户 ID,则数据上下文将使用适合新客户的信息重新填充。由于所有页面都查看相同的数据上下文对象,因此所有后续页面都将显示正确的信息。

您需要在数据上下文对象中实现属性更改通知,并PropertyChanged在页面中进行处理。当CustomerID数据上下文对象中的属性发生更改时,页面视图模型将需要刷新出现在各自视图中的属性。