如何在MVVM项目中设计灵活的导航逻辑?

时间:2011-12-05 04:46:05

标签: wpf mvvm navigation

我正在使用MVVM模式设计项目,因此使用了WPF,绑定等。

现在,问题是,导航布局和逻辑的要求不断变化。 今天,导航逻辑通过绑定在ViewModel中进行了硬编码。 我想知道,有一个好的设计模式可以让这很容易吗?

例如,顶部有一个水平条作为第一级导航,然后是左侧的垂直手风琴控制作为第二级&第3级导航,主区域的一些CollapsiblePanels作为第4级导航。

每当单击任何导航元素时,都会设置ViewModel属性,以便绑定触发视图刷新。

我们的要求人们不断改变关于业务逻辑部分(将其作为用户控件)如何处于第1级,第2级,第3级或第4级的想法:昨天UserControlA可能位于CollapsiblePanel内,因此它是第4级导航;今天,由于一些用户的要求,它可能被提升为二级项目。

我不会责怪需求工程师,因为有可能在MVVM项目中设计一个精致的导航框架,使GUI布局变得容易,甚至可以配置。

有什么建议吗?代码样本非常受欢迎!

1 个答案:

答案 0 :(得分:1)

您应该与MEF或Unity一起查看Prism。它们共同允许您编写模块化应用程序,这听起来正是您所需要的。基本上你要做的是

  • 创建独立控件,这些控件对彼此一无所知,也不会在布局中结束。您可以创建UserControlA,UserControlB等及其相应的视图模型。
  • 使用所选的EventAggregator / Mediator在VM之间进行通信。这些是使用依赖注入(这就是MEF / Unity所做的)
  • 传递给VM的
  • 您创建了一个不包含任何具体控件的主布局,只是一个名为regions的空格。这些是通过名称识别的。
  • 然后,在代码,xaml甚至配置文件中的某个位置,通过说“名称A的区域需要UserControlA类型的控件”将所有内容链接在一起。现在,如果需求发生变化,您只需更改该单行,以便UserControlA现在进入区域AA。应用程序中没有任何其他内容发生变化。

确实需要一些学习来适应它,但最终它是值得的。自从我开始使用棱镜后,我再也没有回头。