因此,假设我想以动态方式修改多个可视元素的 DataContext,并且我想将其作为 Storyboard 的一部分。我可能会这样做:
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="SomeVisualElement" Storyboard.TargetProperty="(FrameworkElement.DataContext)" Duration="0:0:0" >
<DiscreteObjectKeyFrame KeyTime="0:0:0" >
<DiscreteObjectKeyFrame.Value>
<Binding Path="Repository.GeneratedThings[0].Element" />
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
这具有将 DiscreteObjectKeyFrame 的值绑定到 Repository.GeneratedThings[0].Element 的效果。应用此 Storyboard 时,SomeVisualElement 的 DataContext 设置为 Repository.GeneratedThings[0].Element。我认为这相当于说:
<UserControl x:Name="SomeVisualElement" DataContext="{Binding Path="Repository.GeneratedThings[0].Element"} />
这是功能性的,但我想做的是采用某种方式使绑定仅在视觉元素中而不是在关键帧中维护。我们只有很少的视觉元素,但有很多 Storyboard 和 KeyFrames,我们注意到当我们更新 GeneratedThings 对象(而不是集合的单个元素)时,性能损失与 KeyFrames 的数量成正比。
如何设置 DiscreteObjectKeyFrame 以便 DataContext 最终正确绑定但 DiscreteObjectKeyFrame 的值未绑定?在 WPF/XAML 的上下文中,作为绑定的值和被绑定的值之间,这甚至是合理的语义区别吗?
或者,是否有另一种方法可以从 Storyboard 中更改多个可视元素的 DataContext 并且不涉及让每个 Storyboard 维护绑定?