それで、いくつかのビジュアル要素の DataContext を動的に変更したいとしましょう。それをストーリーボードの一部として行いたいとします。私はそうするかもしれません:
<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 と KeyFrame があります。たとえば、GeneratedThings オブジェクト (コレクションの個々の要素ではありません) を更新すると、KeyFrame の数に比例してパフォーマンスが低下することがわかります。
DiscreteObjectKeyFrame を設定して、DataContext が正しくバインドされるが、DiscreteObjectKeyFrame の値がバインドされないようにするにはどうすればよいですか? これは、バインディングである値とバインドされている値との間の WPF/XAML のコンテキストでの合理的なセマンティックな区別でさえありますか?
または、Storyboard 内からいくつかの視覚要素の DataContext を変更する別の方法はありますか?それには、各 Storyboard がバインディングを維持する必要はありませんか?