Prism中动画的事件触发器

时间:2011-08-31 17:35:27

标签: wpf animation mvvm prism

我希望在我的ViewModel中设置属性(比如“StatusMessages”)时触发动画。开发人员已经设置了事件:

 eventAggregator.GetEvent<ShowStatusEvent>().Subscribe(
                    (message) => ShowStatus(message), ThreadOption.UIThread
                );

 private void ShowStatus(MyApp.MyModelViews.StatusMessage statusMessage){
   // set some values in status message view model
 }

我不知道的是Prism用我的View(最好是在XAML中)连接事件的方式,以便触发动画。以下“DataTrigger”仅在将源评估为某些值时起作用(即触发动画),例如从“Debug”更改为“Error”。因此,如果将值设置为12次但设置为相同的值,则每次都说“Debug”,数据触发器最多只发生一次(从默认值到新值,假设它们不相等)。

<DataTrigger Binding="{Binding DataContext.StatusMessages, ElementName=MyPanel}" Value="Error">...</DataTrigger>

我们现在提出的解决方法是引入一个新的bool属性,特别是用于触发动画:

public bool CanBeginStoryboard{
    get
    {
        return canBeginStoryboard;
    }
    set
    {
       canBeginStoryboard = value;
       RaisePropertyChanged(() => CanBeginStoryboard);
    }
}
private void ShowStatus(MyApp.MyModelViews.StatusMessage statusMessage)
{
    CanBeginStoryboard = false;

    //// set some values in status message view model

    CanBeginStoryboard = true;
}
<DataTrigger Binding="{Binding DataContext.CanBeginStoryboard, ElementName=MyPanel}" Value="True">
<DataTrigger.EnterActions>
     <BeginStoryboard>...</BeginStoryboard>
</DataTrigger.EnterActions>

我假设有一种标准的“Prism方式”来做这些事情(比如WPF“RoutedEvent”&gt;“EventTrigger”?),这与我们在这里做的不同?顺便说一句,我们正在使用棱镜4.提前感谢。

0 个答案:

没有答案