从视图模型 (WPF) 调用视图中的动画
Posted
技术标签:
【中文标题】从视图模型 (WPF) 调用视图中的动画【英文标题】:Calling animations in a view from a viewmodel (WPF) 【发布时间】:2013-11-06 16:12:16 【问题描述】:我所拥有的:一个包含动画定义和一个视图定义的样式资源,一个包含数据、属性和 ICommand 的视图模型。
目前,该应用程序可以通过按钮单击(使用 ICommand)调用 VM 函数、绑定到 VM 属性的视图,并且它能够从 button.click 事件触发器运行动画。
我想要做什么; 如果将样式应用于列表框(例如)如何直接从 VM 触发动画? IE。如果数据的某些属性发生变化,是否有可能导致动画运行?我知道我可以使用 UserControl 来做到这一点,但我正试图将我的程序分成更明确定义的视图和视图模型。我不想在我的视图中显示代码,我也不想在我的虚拟机中显示动画。
【问题讨论】:
欢迎来到 Stack Overflow!看起来您希望我们为您编写一些代码。虽然许多用户愿意为陷入困境的编码人员编写代码,但他们通常只有在发布者已经尝试自己解决问题时才会提供帮助。展示这项工作的一个好方法是包含您迄今为止编写的代码、示例输入(如果有的话)、预期输出和您实际获得的输出(控制台输出、堆栈跟踪、编译器错误 - 不管是什么适用的)。您提供的详细信息越多,您可能收到的答案就越多。检查FAQ 和How to Ask 那不是 mvvm。只需在代码隐藏中完成您的 UI 工作即可。 【参考方案1】:当您说 它能够从 button.click 事件触发器运行动画时,您几乎回答了自己的问题。实际答案是肯定的,您可以使用绑定到视图模型属性的数据的DataTrigger
启动动画,或者使用自定义RoutedEvent
以相同方式使用EventTrigger
启动动画:
<Style>
<Style.Triggers>
<DataTrigger Binding="Binding IsAnimationRunning" Value="True">
<DataTrigger.EnterActions>
<BeginStoryboard>
<Storyboard>
<SomeAnimation />
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
</DataTrigger>
</Style.Triggers>
</Style>
这将在 IsAnimationRunning
属性从 false
更改为 true
时启动动画。
【讨论】:
【参考方案2】:编辑:在进一步研究中,我认为您需要的是:WPF Command with Click Event Handler
这个想法是您应该在事件中调用 ICommand,从而允许进一步的事件订阅。它仍然感觉很混乱,因为它几乎忽略了标准的命令绑定语法,但它相当于同一件事,因为命令绑定仍在视图中。
【讨论】:
这个答案应该是一个评论,虽然我没有给你投反对票。 @Sheridan:已修复,答案确实有效。没有意识到 ICommand 停止了点击事件。 在这个网站上,像你这样的简短回答通常是不受欢迎的。通常优选将一些链接页面包含在答案中以提供一些上下文。请参阅Help pages 的“为链接提供上下文”部分了解更多信息。以上是关于从视图模型 (WPF) 调用视图中的动画的主要内容,如果未能解决你的问题,请参考以下文章