我正在开发一个大型MVVM应用程序。我正在使用MVVM light工具包。该应用程序就像一个带有后退和前进按钮的Web浏览器。主视图是用户控件。我在主视图用户控件中放置了后退和前进按钮。主视图又具有用户控件。单击后退和前进按钮时,用户控制更改。主ViewModel跟踪当前用户控件并根据按钮单击加载下一个用户控件。
根据第一步中的选择(ID)加载所有这些用户控件。可以说,主视图是一个搜索屏幕,我们选择一个客户。接下来的屏幕将是地址,账单,请求等。这些屏幕不共享任何数据。但数据是针对同一客户的。
那么,在主视图中存储客户ID是一种很好的做法吗?如果我这样做,我应该有一个绑定到命令的UserControl_Loaded事件,然后我会请求地址和账单信息。
或者我可以将按钮(后退和前进按钮)移动到每个用户控件而不是主视图,将客户ID传递给将加载下一个视图的消息。
哪个更好?
答案 0 :(得分:4)
我过去做过这种事情的方法是实现一个封装操作数据上下文的类。所有页面都将填充此类的(和更新)属性。主视图模型创建此类的实例和页面视图模型的集合,为每个模型提供数据上下文。它还处理页面之间的导航,实现CurrentPage
,NavigateForwardCommand
和NavigateBackwardCommand
属性。
如果用户备份到第1页并更改了客户ID,则会使用适合新客户的信息重新填充数据上下文。由于所有页面都在查看相同的数据上下文对象,因此所有后续页面都将显示正确的信息。
您需要在数据上下文对象中实现属性更改通知,并在页面中处理PropertyChanged
。当数据上下文对象中的CustomerID
属性发生更改时,页面视图模型将需要刷新显示在各自视图中的属性。