【发布时间】:2012-02-21 11:33:52
【问题描述】:
我想定义一个在按下按钮时运行五秒钟的故事板:
我可以在故事板上添加一个保护子句来阻止按钮被多次按下吗?
如果不是,有什么方法可以处理此问题,而无需在 ViewModel 中显式引用动画。
【问题讨论】:
标签: c# windows-phone-7 caliburn.micro
我想定义一个在按下按钮时运行五秒钟的故事板:
我可以在故事板上添加一个保护子句来阻止按钮被多次按下吗?
如果不是,有什么方法可以处理此问题,而无需在 ViewModel 中显式引用动画。
【问题讨论】:
标签: c# windows-phone-7 caliburn.micro
如果您确实需要将按钮链接到动画,那么我可能会创建一个 TriggerAction (System.Windows.Interactivity.TriggerAction) 并将其附加到按钮上。然后该操作将禁用按钮、启动动画并在重新启用按钮之前侦听动画的 Completed 事件。
恕我直言,MVVM 不适用于这种情况,因为所有交互都与视图相关,并且没有真正好的方法来通知您的 ViewModel 动画正在制作动画。此外,实际动画时间不是确定性的,因此如果您假设一个固定时间,可能会有其他含义。
您可能还想看看设置动画的HandOffBehavior。根据您实际执行的动画,如果用户反复敲击按钮,可能不会受到真正的惩罚。如果有,请使用上述建议并禁用该按钮。
【讨论】:
您可以执行以下操作:
Storyboard 并将Button.IsEnabled 设置为false。这将阻止后续点击。Storyboard.Completed 事件以重新启用您的按钮。从 MVVM 的角度来看,按钮的启用状态应该是视图模型的属性。您应该能够将其公开为布尔属性并将其绑定到Button.IsEnabled。当您启动故事板时(可能来自代码隐藏),您可以通过对视图模型的引用来设置按钮启用状态。
是的,...在代码隐藏中!这仍然足以将您的视图与您的视图模型分离并允许进行单元测试。
【讨论】: