我希望在我的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.提前感谢。