微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

silverlight-4.0 – MVVM和NavigationService

实现任何模式的许多好处之一是在应用程序中的不同层之间分离关注点.在Silverlight和MVVM的情况下,我认为NavigationService属于UI.

如果NavigationService属于UI,那么它应该在后面的XAML代码中使用,但命令发生在viewmodel上.我应该在viewmodel中的Command上引发一个事件,让View处理事件并调用Navigation吗?如果我所做的只是导航到另一个页面,那听起来有点荒谬.我不应该直接处理UI事件并从那里导航吗?

View Control Event -> viewmodel Command -> Raise Event -> View
Handled Event -> Navigation

or

View Control Event -> View Handled Event -> Navigation

解决方法

这个问题有两种记录的方法

>使用MVVM Light的消息传递功能实现导航这种方法由Jesse Liberty在Part 3年提出他的MVVM Ligtht汤到坚果系列.他的方法是从命令发送消息到视图,指示应该进行导航操作.
>实现一个处理导航的ViewService这个方法Laurent Bugnion’s response到Jesse的帖子.这实现了一种服务,该服务处理由视图模型触发的所有导航操作.

这两种方法仅涉及WP7应用程序中的导航.但是,它们也可以适用于Silverligt应用程序.

Jesse的方法在SL中更容易使用,因为它不需要访问根视觉.但是,导航代码分布在多个地方,需要后面的代码才能进行实际导航.

Laurent的方法需要访问root visual – 用于访问内置导航功能.如Laurent的代码所示,访问这一点在WP7应用程序中没什么大不了的.然而,在SL应用中,由于没有环绕框架,因此稍微复杂一些.但是,我在我的一个项目中实现SL的模式使用附加属性做了必要的布线 – 所以虽然需要更多的工作,但它也可用于SL.

总而言之 – 虽然,Jesse的方法更容易实现,但我个人更喜欢Laurent的方法,因为它更清晰的架构 – 不需要代码,并且功能被封装到一个单独的组件中,因此位于一个点上.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐