一般上下文:MVVM 应用程序。
我有一个名为 JobView 的视图。它的 DataContext 是一个名为 Job 的类。Job 中有一个名为 AuthorizationNeeded 的属性。
视图中的边框具有样式(来自资源字典),并且该样式具有数据触发器,该触发器基于绑定的属性 AuthorizationNeeded 启动和停止情节提要。
<Style x:Key="AuthorizationNeededBorder"
TargetType="Border">
<Setter Property="Background"
Value="Yellow" />
<Setter Property="Opacity"
Value="0" />
<Style.Triggers>
<DataTrigger Binding="{Binding AuthorizationNeeded, FallbackValue=False}"
Value="True">
<DataTrigger.EnterActions>
<BeginStoryboard Name="Flash"
Storyboard="{StaticResource OneSecondOpacityFlash}" />
</DataTrigger.EnterActions>
<DataTrigger.ExitActions>
<RemoveStoryboard BeginStoryboardName="Flash" />
</DataTrigger.ExitActions>
</DataTrigger>
</Style.Triggers>
</Style>
一切都按预期工作。更改 AuthorizationNeeded 的值会在移至 true 时启动情节提要闪烁,并在移至 false 时移除(并停止)情节提要。
但是,如果我在 storyboard 运行时将 JobView 的 DataContext 更改为不同的 ViewModel(不同的 Job),即使 AuthorizationNeeded 的值在新 Job 中为 false,storyboard 也会继续运行。
在 DataContext 更改期间,数据触发器没有看到 AuthorizationNeeded true -> false 的值变化。
任何关于我如何达到 AuthorizationNeed = true = storboard 运行到 AuthorizationNeeded = false = 故事板在所有情况下都没有运行的期望行为的任何想法都将不胜感激。(我不希望在 DataContext 更改时手动更改 AuthorizationNeeded 的值,因为实际上这个视图上有很多这样的触发器......)