我正在开发一个基于WPF的MVVM应用程序,有一个关于最佳处理应用程序内视图导航的问题。具体来说,当我有多个视图可以导航时,我想知道最清晰的方法是什么。
让我总结一下我的当前应用程序布局,以便更好地解释问题。 上面的图显示了我的主壳体的大致布局。 主导航区是静态的,提供了许多按钮。 按钮存在于主要应用程序功能(例如状态、配置、诊断等)中。 当其中一个按钮被按下时,上下文导航区的内容被设置。 具体来说,这是通过将上下文导航区包含一个内容控件,并将
填充在上下文导航内容控件中的特定视图/视图模型然后提供与在主导航中选择的主要功能相关的其他导航选项。 当在上下文导航中选择选项时,主内容区域以与先前描述上下文导航相同的方式进行更新。
因此,我认为您可以将
现在来说问题。我可以让它工作,但是它变得非常混乱!我有一个
我开始思考最好的方法是创建一个抽象服务,为应用程序中的所有视图模型处理导航,但不确定它会是什么样子。我这么做对吗?如果是这样,是否有人有任何关于应用程序范围导航服务的建议,可以处理来自多个视图模型的导航?
让我总结一下我的当前应用程序布局,以便更好地解释问题。 上面的图显示了我的主壳体的大致布局。 主导航区是静态的,提供了许多按钮。 按钮存在于主要应用程序功能(例如状态、配置、诊断等)中。 当其中一个按钮被按下时,上下文导航区的内容被设置。 具体来说,这是通过将上下文导航区包含一个内容控件,并将
Content
属性绑定到类型为ViewModelBase
的单个属性来实现的。 此外,视图模型和视图通过应用程序资源中的数据模板相互关联。填充在上下文导航内容控件中的特定视图/视图模型然后提供与在主导航中选择的主要功能相关的其他导航选项。 当在上下文导航中选择选项时,主内容区域以与先前描述上下文导航相同的方式进行更新。
因此,我认为您可以将
MainNavigation
和ContextualNavigation
区域的组合描述为非常类似于Outlook样式的菜单栏。 即底部的主要选择,顶部的次要选择,导致主内容区域的更改。现在来说问题。我可以让它工作,但是它变得非常混乱!我有一个
MainNavigationViewModel
引起导航,还有多个上下文的ViewModels
填充到ContextualNavigation
区域导致导航。在某些情况下,主内容区域中的操作也可能导致需要导航。我实际上还有一个可能导致一些导航的Ribbon控件。所以我的ViewModels
中到处都是导航,我不认为这是可维护的。顺便说一句,如果你想知道,我目前正在使用一个信使系统来允许视图模型之间的解耦通信。我开始思考最好的方法是创建一个抽象服务,为应用程序中的所有视图模型处理导航,但不确定它会是什么样子。我这么做对吗?如果是这样,是否有人有任何关于应用程序范围导航服务的建议,可以处理来自多个视图模型的导航?
INavigate
(例如INavigate.AddContextTarget()
-在上下文导航中添加某些内容),您可以通过构造函数参数提供对它的访问。 - Sinatr