以下に、グリッド内の 2 つの異なる列のセル テンプレートとして使用される 2 つのコントロール テンプレートがあります。両方の列が同じモデル プロパティ (コードと値) にバインドされていますが、コンバーターを使用してこれらの値を異なる方法で表示していることがわかります。どちらのコントロール テンプレートも同じスタイルを使用して、データが変更されたときにセルを「点滅」させます。
これは機能しますが、私が望む方法とはまったく異なります。現在、Data.Code または Data.Value のいずれかが変更されると、両方の列セルが点滅します。私が望むのは、Data.Code == "CodeA" の場合、テンプレート CDisplay2 を使用する列は点滅しないはずです (実際、何も表示されません)。また、Data.Code == "CodeB" の場合、テンプレート CDisplay1 を使用するセルは点滅しません。
これを達成するには、Data.Code に基づいて条件付きでスタイル テンプレートを適用できれば素晴らしいと思いますが、その方法がわかりません。これについて何か考えはありますか?特定のプロパティ値に基づいて、同じモデル プロパティにバインドされた複数のコントロールにスタイルを選択的に適用するにはどうすればよいですか?
<Style x:Key="FlashStyle" TargetType="TextBlock" >
<Setter Property="Visibility" Value="Collapsed"/>
<Style.Triggers>
<EventTrigger RoutedEvent="Binding.TargetUpdated">
<EventTrigger.Actions>
<BeginStoryboard>
<Storyboard>
<ObjectAnimationUsingKeyFrames RepeatBehavior="4x" Storyboard.TargetProperty="(UIElement.Visibility)">
<DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Visible}"/>
<DiscreteObjectKeyFrame KeyTime="0:0:0.4" Value="{x:Static Visibility.Collapsed}"/>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
</Style.Triggers>
</Style>
<ControlTemplate x:Key="CDisplay1" >
<Grid>
<TextBlock Style="{StaticResource Flash1}" >
<TextBlock.Text>
<MultiBinding Converter="{StaticResource conv}" ConverterParameter="CodeA" NotifyOnTargetUpdated="True">
<Binding Path="Data.Code" />
<Binding Path="Data.Value" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</Grid>
</ControlTemplate>
<ControlTemplate x:Key="CDisplay2" >
<Grid>
<TextBlock Style="{StaticResource Flash1}" >
<TextBlock.Text>
<MultiBinding Converter="{StaticResource conv}" ConverterParameter="CodeB" NotifyOnTargetUpdated="True">
<Binding Path="Data.Code" />
<Binding Path="Data.Value" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</Grid>
</ControlTemplate>