我正在开发一个大型的MVVM应用程序。为此,我使用了MVVM工具包。应用程序就像一个带有后退和前进按钮的web浏览器。主视图是一个用户控件。我在主视图用户控件中放置了后退和前进按钮。主视图又有用户控件。当单击“后退”和“向前”按钮时,用户控件将发生更改。主ViewModel跟踪当前用户控件,并根据单击按钮加载下一个控件。
所有这些用户控件都根据第一步的选择(ID)加载。让我们说,主视图是一个搜索屏幕,我们选择一个客户。下一个屏幕将是地址、计费、请求等。这些屏幕不共享任何数据。但数据是给同一个客户的。
那么,在主视图中存储客户ID是一种良好的实践吗?如果我这样做,我应该有一个UserControl_Loaded事件绑定到一个命令,然后我将请求地址和计费信息。
或者,我可以将按钮(后退和向前按钮)移动到每个用户控件,而不是主视图,传递带有将加载下一个视图的消息的客户ID。
哪种更好些呢?
发布于 2011-08-12 21:47:41
在你的主CustomerViewModel里
Customer对象ObservableCollection<ViewModelBase> CustomerSubViewModelsint CustomerSubViewModelIndexBackCommandForwardCommandViewModelBase CurrentView,即返回CustomerSubViewModels[CustomerSubViewModelIndex]您的主CustomerView将包含一个ContentControl,它的Content绑定到CurrentView,Back/Forward按钮将更改CustomerSubViewModelIndex +- 1,这反过来改变了CurrentView中显示的页面。DataTemplates将用于定义如何在ContentControl中绘制它们。
您的页面(如Addresses、Billing、Requests )都将存储在CustomerSubViewModels集合中,我将从CustomerViewModel中传递它们所需的Customer属性。它可以是一个类似于CustomerId的值,一个像Customer.Addresses这样的属性,甚至是整个Customer对象。我会用
https://softwareengineering.stackexchange.com/questions/100738
复制相似问题