0

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

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

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

4

2 回答 2

3

当您说它能够从 button.click 事件触发器运行动画时,您几乎在那里回答了您自己的问题。DataTrigger实际答案是肯定的,您可以使用绑定到视图模型属性的数据来​​启动动画,或者以相同的方式EventTrigger使用自定义RoutedEvent

<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

于 2013-11-06T16:19:30.463 回答
0

编辑:在进一步研究中,我认为您需要的是:带有 Click 事件处理程序的 WPF 命令

这个想法是您应该在事件中调用 ICommand,从而允许进一步的事件订阅。它仍然感觉很混乱,因为它几乎忽略了标准的命令绑定语法,但它相当于同一件事,因为命令绑定仍在视图中。

于 2013-11-06T16:13:58.487 回答