【问题标题】:Should animation cues be in my view model? MVVM动画提示应该在我的视图模型中吗? MVVM
【发布时间】:2011-06-09 16:22:54
【问题描述】:

我正在重构一个 silverlight LOB 应用程序以使用 MVVM..

在我的一个控件上,我有一些动画,一旦加载数据,这些动画当前就会在代码隐藏中触发..

这是视图特定的数据,因为视图模型应该有点无头(不依赖于动画等视图对象)..

这段代码应该在哪里?

谢谢

【问题讨论】:

    标签: wpf animation silverlight-4.0 mvvm


    【解决方案1】:

    一个数据触发器,一个数据触发器!我的 DataTrigger 王国!

    在 WPF 中,您可以根据 ViewModel 中的数据触发动画。在 Silverlight 中,他们使用 VSM……我还没有费心去了解它是如何完成的。显然,Blend Behavior SDK(您可以单独下载)提供了一个 DataTrigger 近似值,该近似值可以触发 VSM 转到基于绑定的行为。 This stackoverflow question(不是公认的答案,而是 Mike Post 的答案)展示了如何做到这一点……后续的回答展示了如何在没有 Blend 的情况下做到这一点。

    【讨论】:

    • 幽默感+1。程序员需要更多! =D
    • 好答案.. 拼命尝试使用 VSM.. 但唯一的问题是控件是 Grid.. 你不能在网格上设置模板,有什么建议吗?
    • 您正在尝试像在面板中一样为网格设置动画?还是您更关心网格中的元素。例如,如果您尝试在加载数据时将控件动画化到视图中,则直接针对该控件。如果您尝试为整个网格设置动画,请将其包装在 UserControl 中并定位它。
    【解决方案2】:

    简而言之,您可以将动画触发器装配为数据触发器——无需代码隐藏。其他 View 技术(不是 WPF 或 Silverlight)将要求您向 ViewModel 添加“数据加载完成”事件。

    MVVM 是简单的 MVP 与 WPF/Silverlight 集成,使这样的信号更容易。我相信 WPF 包含一个数据触发器,可用于触发动画。这允许您放弃向 ViewModel 添加“数据加载完成”事件。您现在可以添加事件,但您可能会浪费时间,为可能永远不需要的 MVP 兼容性准备代码。

    MVVM 和 MVP 的目的是使表示视图可互换。考虑 WinForms、WinCE、纯文本终端(甚至文本到语音)视图应如何通知用户数据已加载。每种技术的行为都会有所不同。因此,当不使用 WPF 或 Silverlight 时,更改用户界面的行为应该驻留在 View 的代码隐藏中。

    【讨论】:

    • +1 很好地解释了为什么动画是一个视图问题并且应该留在视图中。
    • 绝对好答案...补充您所说的,今天的需求可能是动画,明天它可能会显示以前隐藏的 UI 部分。 VM 不应该关心发生了什么,只需提供足够的信息以便 View 可以响应。\
    猜你喜欢
    • 2023-04-03
    • 1970-01-01
    • 2018-03-13
    • 1970-01-01
    • 2012-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多