2014-06-26 92 views
0

我想使用MVVM模式在Windows Phone 8 Silverlight中创建动画按钮。 这个控件应该像这样工作:Windows Phone MVVM动画按钮

点击时,如果它的值是正确的,它会触发旋转动画。当文字不可见(围绕Y轴旋转90度)时,我会将按钮上的文字更改为“Yes!”。然后它会旋转回正常状态。 如果值不正确,我会将背景改为红色,而不旋转。

在WPF我可以用DataTriggers,所以我想是这样的:

1)用户点击按钮 - >命令执行

2A)如果值是正确的,我在视图模型一定的价值变化,这触发DataTrigger,这将启动第一动画旋转按钮90度

3a)的动画的结束触发命令,该命令改变文本值

4a)的文本变化触发第二旋转中,在开始旋转按钮180度,然后进行正常的90度的旋转,所以它看起来像新的文本是对其他网站

2B)如果值不正确,我改变了一些值值触发错误的值动画

但在Windows手机Silverlight的有样式中没有触发器,所以最简单的方法就是使用代码隐藏,但我想在MVVM中实现。 也许有人遇到了类似的问题。 目前,我正在考虑使用从MVVM光工具包的消息,但我不知道,如果它会工作

编辑:

好,感谢穆罕默德赛义夫的提示,我设法使它工作。我使用button的命令将点击发送给虚拟机,接下来我使用MVVM light Toolkit发送消息来查看启动动画。不幸的是,MVVM light toolkit中的EventToCommand不能用于Storyboard,所以我只是在Completed事件ant后面的代码中执行VM命令,它会更改值并发送下一条消息。

回答

0

您可以将命令从xaml绑定到您的虚拟机。以下是您如何在MVVM Light中绑定命令的示例。

对于按钮

<Button ....> 
<i:Interaction.Triggers> 
    <i:EventTrigger EventName="Click"> 
    <MvvmLight_Command:EventToCommand Command="{Binding Navigate}" CommandParameter="{Binding ElementName=btnClockin,Path=Tag}"></MvvmLight_Command:EventToCommand> 
    </i:EventTrigger> 
</i:Interaction.Triggers> 

添加以下Y上

xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity" 
    xmlns:MvvmLight_Command="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Extras.WP8" 

在VM

命令码
/// <summary> 
    /// Gets the Navigate. 
    /// </summary> 
    public RelayCommand<object> Navigate 
    { 
     get 
     { 
      return _navigate 
       ?? (_navigate = new RelayCommand<object>(
             page => 
             { 
              if (page.ToString() == "0") 
               MessageBox.Show("Comming Soon"); 
              else 
               Messenger.Default.Send<NavigateCommand, MyPge33>(new NavigateCommand(page.ToString())); 
             })); 
     } 
    } 

可以绑定命令,在页面的XAML程序集的引用我们的故事板以类似的方式。但是,为了启动故事板,您可以将消息从您的VM发送到view.xaml.cs以启动故事板。

希望这会有所帮助。