【发布时间】:2011-06-09 16:22:54
【问题描述】:
我正在重构一个 silverlight LOB 应用程序以使用 MVVM..
在我的一个控件上,我有一些动画,一旦加载数据,这些动画当前就会在代码隐藏中触发..
这是视图特定的数据,因为视图模型应该有点无头(不依赖于动画等视图对象)..
这段代码应该在哪里?
谢谢
【问题讨论】:
标签: wpf animation silverlight-4.0 mvvm
我正在重构一个 silverlight LOB 应用程序以使用 MVVM..
在我的一个控件上,我有一些动画,一旦加载数据,这些动画当前就会在代码隐藏中触发..
这是视图特定的数据,因为视图模型应该有点无头(不依赖于动画等视图对象)..
这段代码应该在哪里?
谢谢
【问题讨论】:
标签: wpf animation silverlight-4.0 mvvm
一个数据触发器,一个数据触发器!我的 DataTrigger 王国!
在 WPF 中,您可以根据 ViewModel 中的数据触发动画。在 Silverlight 中,他们使用 VSM……我还没有费心去了解它是如何完成的。显然,Blend Behavior SDK(您可以单独下载)提供了一个 DataTrigger 近似值,该近似值可以触发 VSM 转到基于绑定的行为。 This stackoverflow question(不是公认的答案,而是 Mike Post 的答案)展示了如何做到这一点……后续的回答展示了如何在没有 Blend 的情况下做到这一点。
【讨论】:
简而言之,您可以将动画触发器装配为数据触发器——无需代码隐藏。其他 View 技术(不是 WPF 或 Silverlight)将要求您向 ViewModel 添加“数据加载完成”事件。
MVVM 是简单的 MVP 与 WPF/Silverlight 集成,使这样的信号更容易。我相信 WPF 包含一个数据触发器,可用于触发动画。这允许您放弃向 ViewModel 添加“数据加载完成”事件。您现在可以添加事件,但您可能会浪费时间,为可能永远不需要的 MVP 兼容性准备代码。
MVVM 和 MVP 的目的是使表示视图可互换。考虑 WinForms、WinCE、纯文本终端(甚至文本到语音)视图应如何通知用户数据已加载。每种技术的行为都会有所不同。因此,当不使用 WPF 或 Silverlight 时,更改用户界面的行为应该驻留在 View 的代码隐藏中。
【讨论】: