如何知道动画在我的ViewModel中何时完成?

时间:2012-02-19 22:25:50

标签: .net wpf animation mvvm

我正在寻找能够在动画结束时告诉我的依赖属性。我通过设置属性“IsDirty”来显示闪光(背景更改),让View知道它应该为背景设置动画,但我需要重置下一次更改的值。

我希望你明白我的意思。

编辑:要显示我正在使用故事板的闪光灯。

2 个答案:

答案 0 :(得分:1)

您可以处理StoryBoard的{​​{3}}并在该时间点设置任何通知。我意识到你想要避免代码,但我认为在这个实例中将需要它,因为StoryBoard上的“IsComplete”没有这样的依赖属性,你可以用它来绑定数据。

答案 1 :(得分:0)

你没有,你不应该。

viewmodel应该对视图*没有任何线索,更不用说视图完成动画的时候了。 VM完全没有IsDirty属性,视图的功能取决于它,VM无需了解它。但是,您应该检查您对该标志的使用 - 常用用途是指示数据处于已更改和未保存状态,当您的UI动画完成时,VM仍处于脏状态,因此您不应使用此标志进行切换每次数据更改时动画(改为使用常规PropertyChanged事件)。

修改
在回应评论时,这里有一点澄清。

  

IsDirty意味着应该通知用户有关更改。

可以通过多种方式通知用户数据已更改。这可以是一次性事件,如状态区域中的图标,UI闪存等。IsDirty标志只应由VM重置,因为VM知道何时保存了更改的数据。该视图为您提供了一个触发保存机制的按钮(或其他),它实际上并不知道数据何时(或是否)已实际保存,因此视图不应重置该标志。您不需要视图来指示通知已完成 - 您可以在动画发生时禁用保存按钮或其他UI元素,以防止用户与数据交互。

如果要通知每个时间数据发生变化,然后实现上面提到的INotifyPropertyChanged接口,可以通过VM上的接口公开PropertyChanged事件,然后查看视图可以订阅它,你可以触发你感兴趣的任何属性变化的动画。你需要小心限制它 - 你不想为了快速的属性变化而动画疯狂。< / p>

*我还没有看到VM知道并能够操作或响应视图的有效用途。许多人这样做,但只是糟糕的设计迫使他们采用这种方法。