你有一个等待故事板完成的保护条款吗?

时间:2012-02-21 11:33:53

标签: c# windows-phone-7 caliburn.micro

我想定义一个按下按钮时运行五秒钟的故事板:

  • 我可以在故事板上放置一个保护条款来阻止多次按下按钮吗?

  • 如果不是,在不必在ViewModel中明确引用动画的情况下处理此问题的方法是什么。

2 个答案:

答案 0 :(得分:1)

您可以执行以下操作:

  • 点击该按钮后,启动Storyboard并将Button.IsEnabled设置为false。这样可以防止后续点击。
  • 处理Storyboard.Completed事件以重新启用按钮。

从MVVM的角度来看,按钮的启用状态应该是视图模型的属性。您应该能够将其公开为布尔属性并将其绑定到Button.IsEnabled。当您启动故事板(可能来自代码隐藏)时,您可以通过对视图模型的引用来设置启用按钮的状态。

是的,...在代码隐藏中!这仍然可以将您的视图与视图模型完全分离,并允许进行单元测试。

答案 1 :(得分:1)

如果你真的需要按钮链接到动画,那么我可能会创建一个TriggerAction(System.Windows.Interactivity.TriggerAction)并将其附加到按钮。然后,操作将禁用按钮,启动动画并在重新启用按钮之前侦听动画的“已完成”事件。

恕我直言MVVM在这种情况下是不合适的,因为所有交互都与视图相关,并且没有真正好的方法来通知您的ViewModel动画是动画的。此外,实际的动画时间不是确定性的,因此如果你假设一个固定的时间,可能会产生其他影响。

您可能还想查看设置动画的HandOffBehavior。根据您实际执行的动画,如果用户反复敲击按钮,则可能没有真正的惩罚。如果有,请使用上述建议并禁用该按钮。