【问题标题】:Calling animations in a view from a viewmodel (WPF)从视图模型 (WPF) 调用视图中的动画
【发布时间】:2013-11-06 16:12:16
【问题描述】:

我所拥有的:一个包含动画定义和一个视图定义的样式资源,一个包含数据、属性和 ICommand 的视图模型。

目前,该应用程序可以通过按钮单击(使用 ICommand)调用 VM 函数、绑定到 VM 属性的视图,并且它能够从 button.click 事件触发器运行动画。

我想要做什么; 如果将样式应用于列表框(例如)如何直接从 VM 触发动画? IE。如果数据的某些属性发生变化,是否有可能导致动画运行?我知道我可以使用 UserControl 来做到这一点,但我正试图将我的程序分成更明确定义的视图和视图模型。我不想在我的视图中显示代码,我也不想在我的虚拟机中显示动画。

【问题讨论】:

  • 欢迎来到 Stack Overflow!看起来您希望我们为您编写一些代码。虽然许多用户愿意为陷入困境的编码人员编写代码,但他们通常只有在发布者已经尝试自己解决问题时才会提供帮助。展示这项工作的一个好方法是包含您迄今为止编写的代码、示例输入(如果有的话)、预期输出和您实际获得的输出(控制台输出、堆栈跟踪、编译器错误 - 不管是什么适用的)。您提供的详细信息越多,您可能收到的答案就越多。检查FAQHow to Ask
  • 那不是 mvvm。只需在代码隐藏中完成您的 UI 工作即可。

标签: c# wpf animation mvvm view


【解决方案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 的“为链接提供上下文”部分了解更多信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多