【问题标题】:Getting data from a view in MVVM?从 MVVM 中的视图获取数据?
【发布时间】:2011-01-14 13:35:47
【问题描述】:

我有一个 silverlight bing 地图应用程序。我将 MVVM 模式与 PRISM 一起使用。 bing 地图有一个“BoundingRectangle”属性,该属性在 XAML 中不可用,但可以通过后面的代码使用。当然,这对我没有好处,因为我需要视图模型中的数据,而这些数据无法访问后面的视图代码(我也不想添加它,因为我真的很想尝试不使用后面的视图代码如果可能的话)。

通常,您会通过两种方式绑定到视图模型属性。 Bing 地图将为图层显示 BoundingRectangle,但不适用于基本地图(我可以找到)。

我不是在这里寻找技巧,只是想知道将数据从视图中获取到不可“绑定”的视图模型的最佳实践或约定。

谢谢!

【问题讨论】:

    标签: silverlight mvvm prism


    【解决方案1】:

    Silverlight 中的数据绑定只是一个框架功能,可以在视图和视图模型之间自动同步数据(如果您遵循 MVVM 模式)。不过,自己做也没有错!

    MVVM 模式的两个主要优点(除了大多数 UI 模式提供的通常的关注点分离)是:

    1. 它有助于单元测试,可以在没有视图的情况下从单元测试代码中执行视图模型。
    2. 它有助于开发人员/设计人员的工作流程,减少设计人员和开发人员之间共享的文件。

    根据我的经验,拥有少量“协助”绑定框架的代码隐藏一点也不难!

    您可以使用附加行为等技术来封装此代码,但这通常只会带来外观上的改进。

    【讨论】:

    • 因此,您建议执行以下操作:使用事件聚合器之类的东西以及背后的代码将数据共享到需要的地方?
    • 视图背后的代码是特定于该视图的,您不需要聚合器/调解器或任何其他花哨的模式。只需将数据从您的视图模型复制到您的视图,反之亦然!手动装订;-)
    • 顺便说一下,我已经编写了相当大的应用程序,这些应用程序主要使用框架数据绑定,因为它快速简单,但是绑定不起作用,例如设置网格行高,我使用代码隐藏。我仍然有很好的关注点分离并且可以进行单元测试。务实!
    • 我正在使用聚合器使地图视口中的更改为许多模块所知,但我明白你的意思。如果这是目前最佳做法的答案,那就太好了,谢谢:)
    【解决方案2】:

    克雷格F, 您可以使用调解器模式,如果您使用 Galasoft Light 工具包,则使用 messenger 将消息从视图发送到您的视图模型。 Viewmodel 注册到该消息,如果收到一个在 viewmodel 中设置您的属性并执行一些逻辑..

    【讨论】:

      猜你喜欢
      • 2013-12-16
      • 2015-11-21
      • 1970-01-01
      • 1970-01-01
      • 2017-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-05
      相关资源
      最近更新 更多