gpt4 book ai didi

silverlight-4.0 - MVVM 和导航服务

转载 作者:行者123 更新时间:2023-12-04 07:20:40 24 4
gpt4 key购买 nike

实现任何模式的众多好处之一是在应用程序的不同层之间分离关注点。对于 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 汤到坚果系列。他的方法是从命令向 View 发送一条消息,指示应该进行导航操作。
  • 实现处理导航的 ViewService 这种方法是 Laurent Bugnion's response到杰​​西的帖子。这实现了处理由 View 模型触发的所有导航操作的服务。

  • 这两种方法都只处理 WP7 应用程序中的导航。但是,它们也可以适应 Silverligt 应用程序。

    Jesse 的方法在 SL 中更易于使用,因为它不需要访问根视觉对象。但是,导航代码会分布在多个地方,并且需要背后的代码来进行实际的导航。

    Laurent 的方法需要访问根视觉对象 - 用于访问内置导航功能。在 WP7 应用程序中,访问这个(如 Laurent 的代码所示)没什么大不了的。然而,在 SL 应用中,它稍微复杂一些,因为没有环绕框架。但是,我已经在我的一个项目中使用附加属性实现了 SL 的模式,并执行所需的接线 - 因此虽然需要更多工作,但它也可用于 SL。

    所以总结一下 - 虽然 Jesse 的方法更容易实现,但我个人更喜欢 Laurent 的方法,因为它是更简洁的架构 - 不需要背后的代码,并且功能被封装到一个单独的组件中,因此位于一个点。

    关于silverlight-4.0 - MVVM 和导航服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8866751/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com