0

以下に、2つのテキストボックスで構成されるコントロールテンプレートがあります。コントロールテンプレートはグリッドのセル表示テンプレートとして使用され、datacontextはモデルオブジェクト(INotifyPropertyChangedを実装する)のバインディングリストです。2番目のテキストボックスは最初は折りたたまれています。ただし、「アスク」と「ビッド」の価格更新が発生した場合は、表示を約1秒間切り替えて、このテキストボックスを「フラッシュ」したいと思います。

私が見ている問題は、フォームの最初のロード時に、2番目のテキストボックスが点滅するのを確認することですが、その後は...何も表示されません。興味深いことに、セルグリッド(編集テンプレートをアクティブにする)をクリックしてからセルの外をクリックすると(下に示すテンプレートである表示テンプレートに戻ります)、2番目のテキストボックスが点滅します。

AskPriceまたはBidPriceが変更されたときに2番目のテキストボックスが「点滅」しない理由を誰かが見ることができますか?コンバーターが期待どおりに呼び出されていることはわかりますが、更新によってストーリーボードアニメーションがトリガーされていません。

<Style x:Key="PriceSpreadAlertStyle" TargetType="TextBlock">
    <Setter Property="Visibility" Value="Collapsed" />
    <Setter Property="Background" Value="Red" />
    <Style.Triggers>
        <EventTrigger RoutedEvent="Binding.TargetUpdated" >
            <EventTrigger.Actions>
                <BeginStoryboard>
                    <Storyboard>
                        <ObjectAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetProperty="(UIElement.Visibility)">
                            <DiscreteObjectKeyFrame KeyTime="00:00:00.2" Value="{x:Static Visibility.Visible}"/>
                            <DiscreteObjectKeyFrame KeyTime="00:00:00.4" Value="{x:Static Visibility.Collapsed}"/>
                            <DiscreteObjectKeyFrame KeyTime="00:00:00.6" Value="{x:Static Visibility.Visible}"/>
                            <DiscreteObjectKeyFrame KeyTime="00:00:00.8" Value="{x:Static Visibility.Collapsed}"/>
                            <DiscreteObjectKeyFrame KeyTime="00:00:01.0" Value="{x:Static Visibility.Visible}"/>
                            <DiscreteObjectKeyFrame KeyTime="00:00:01.2" Value="{x:Static Visibility.Collapsed}"/>
                        </ObjectAnimationUsingKeyFrames>
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger.Actions>
        </EventTrigger>
    </Style.Triggers>
</Style>

<ControlTemplate x:Key="QuoteDisplayTemplate" >
    <StackPanel Orientation="Horizontal">
        <TextBlock Text="{Binding QuotePrice}" />
        <TextBlock Style="{StaticResource PriceSpreadAlertStyle}">
          <TextBlock.Text>
            <MultiBinding Converter="{StaticResource AskBidToSpreadConverter}">
              <Binding Path="AskPrice" UpdateSourceTrigger="PropertyChanged" NotifyOnTargetUpdated="True" />
              <Binding Path="BidPrice" UpdateSourceTrigger="PropertyChanged" NotifyOnTargetUpdated="True" />
            </MultiBinding>
          </TextBlock.Text>
        </TextBlock>
    </StackPanel>
</ControlTemplate>
4

2 に答える 2

1

NotifyPropertyChangedを実行すると、コードビハインドで値が「取得」されることを確認してください。

同じ理由で、最初に起動するときにバインディング式のエラーがないか確認してください。

また、バインディングモードを一方向に変更してみることができます。私はそうは思いませんでしたが、変更されたイベントを処理できないように、バインディングモードがワンタイムバインディングに設定されている可能性があります。

編集:TargetUpdatedの代わりにSourceUpdated RoutedEventを使用してみましたか?

于 2012-08-08T17:03:50.113 に答える
1

私が見つけた解決策は、'NotifyOnTargetUpdated="True"'をBinding要素からMultiBinding要素に移動することでした。

于 2012-08-08T20:41:55.507 に答える