Prism 4 文档 ---第8章 导航


    作为同用户具有丰富的交互的客户端应用程序,它的用户界面(UI)将会持续不断的更新来反映用户工作的当前的任务和数据。用户界面可以进行一段时间相当大的变化作为用户交互的应用程序中完成各种任务。通过该应用程序协调这些用户界面的变化的过程通常被称为导航。     经常,导航意味着某些控件将会从UI中移除,其他的控件将会被添加到UI中。在另外的情况下,导航也意味着一个或多个存在的控件的可视化状态被更新。---例如,一些控件可能被简单的隐藏或收缩而另外的一些控件被显示后展开。类似的,导航可能意味着一个控件展示的绑定的数据被更新来反映应用程序的当前状态---例如,在一个主-细 场景中,细节中展示的数据将会基于当先主视图中选中项来更新。所有的这些场景都可以认为是导航因为用户界面被更新了来翻译用户的当前的任务和应用程序的当前状态。     应用程序中的导航可以是来自UI中的用户交互或者来自应用程序本身中内部逻辑驱动的状态变化的结果。在一些情况下,导航可能会环形非常简单的没有应用程序逻辑的UI更新。在另外的一些情况下,应用程序可能会实现复杂的逻辑来以编程的方式控制导航来却好一些确定的业务逻辑被遵循---例如,应用程序可能无法允许用户导航离开一定的形式在未确认输入的数据是否正确。     实现在WPF或Silverlight应用程序的所需导航性能往往是相对简单的,因为它们都提供了用于导航的直接支持。然而,在一个使用了MVVM模式或者一个使用松耦合的模块组合的应用程序中实现导航将会非常的负责。Prism提供了这种情况下实现导航的指导。 Prism 中的导航     导航被应用程序协调用户交互的结果或者应用程序内部状态的改变导致的UI的变化的过程。     UI的更新可以通过充应用程序的可视树中添加或者移除元素来实现。或者通过应用可视树中存在的元素的状态的变化来实现。WPF和Silverlight是非常灵活的平台,并且它往往是可能实现使用下面两种方法中的特定导航方案。然而,最适合你的应用程序的方法取决于多方法的因素。     在前面描述中Prism区分了两种导航方式的区别。通过改变可视树中已存在的控件的状态来实现导航的方式称为基于状态的导航。通过往可视树中添加或者移除元素的方式来是实现导航的方式称为基于视图的导航。Prism提供了基于两种方式实现导航的指导,注意应用程序使用MVVM模式来区分UI与展现逻辑与数据(封装在视图模型中)的情况。

基于状态导航

    在基于状态的导航中,在UI中展现更新的视图的更新方式要么是通过视图模型中状态的变化,要么是通过用户与视图本身的交互。在这种导航的方式中,不是将一个视图替换为另一个视图,而是视图的状态发生了变化。基于视图的状态是如何变化的,UI的更新使得用户感觉像是导航。     这种方式的导航适用于以下几种情况:
  • 视图需要在不同的方式或者格式中展现相同的数据或功能
  • 视图需要根据其视图模型中的底层状态来改变布局或者样式
  • 视图需要启动用户和视图内容的模态或者非模态的交互
    这种导航方式不适用于UI还没有为用户呈现不同的数据或者用户还没有指定一个不同的任务的情况。在这些情况下,最好的实现是分离视图(视图模型)来重新呈现数据或这任务,然后在她们之间使用在本章后面将会讲到的基于视图的导航。类似地,这种导航方式不适用于要求在导航中实现一系列的过于复杂的UI状态变化因为视图的定义可能会变得很大而且维护起来很困难。在这种情况下,最好通过使用基于视图的导航来实现单独的视图之间的导航。     接下来的几节将会描述适用基于状态的导航的典型的场景。每一个这样的场景中都在State-Based Navigation QuickStart有涉及,它实现了一个可使他们管理和交流它们的联系的即时消息方式的应用程序。

以不同的格式或者样式展示数据

    你的应用程序可能经常需要为用户展现相同的数据,但是实在不同的格式或样式中。在这种情况下,你可以使用一个基于状态的导航在视图中来在不同的样式的视图中间进行切换,可能在她们之间使用动画变换。例如,State-Based Navigation QuickStart允许用户选择他们的关系被如何展示---作为一个简单的文本列表或者作为一个图标。用户可以通过点击List按钮或者Avatarts按钮来在这些可视化的展现中切换。视图提供了两个重现之间的动画变化,如下插图所示。     为了实现这个行为,State-Based Navigation QuickStart实现了一个SendMessage命令,这个命令绑定到了SendMessage按钮。当这个命令被唤醒时,视图模型同视图进行交互展现一个弹出式的创建,这是通过使用第五章"http://msdn.microsoft.com/en-us/library/cc626338(v=VS.95).aspx

关于Blend行为的更多信息, 请参考MSDN上的 "Working with built-in behaviors":
http://msdn.microsoft.com/en-us/library/ff724013(v=Expression.40).aspx

关于使用Blend创建自定义行为的更多信息, 请参考MSDN上的  "Creating Custom Behaviors": 
http://msdn.microsoft.com/en-us/library/ff724708(v=Expression.40).aspx

关于Silverlight导航框架的更多信息, 请参考MSDN上的 "Navigation Overview":
http://msdn.microsoft.com/en-us/library/cc838245(VS.95).aspx

关于Prism和Silverlight导航框架集成的更多信息, 请参考Karl Schifflet的博客"Integrating Prism v4 Region Navigation with Silverlight Frame Navigation" :
http://blogs.msdn.com/b/kashiffl/archive/2010/10/05/integrating-prism-v4-region-navigation-with-silverlight-frame-navigation.aspx