1

私が持っているのは次のすべてですDataGrid

<DataGrid x:Name="resourceDataGrid" 
          HorizontalAlignment="Stretch" 
          VerticalAlignment="Stretch" 
          AutoGenerateColumns="false" 
          GridLinesVisibility="None"
          RowHeaderWidth="0" 
          CanUserAddRows="True" 
          CanUserDeleteRows="True" 
          ItemsSource="{Binding Path=Resources, 
                                Mode=TwoWay,
                                UpdateSourceTrigger=PropertyChanged, 
                                IsAsync=True}">
    <DataGrid.Columns>
        <DataGridTemplateColumn CellTemplate="{StaticResource readOnlyCellUpdatedStyle}"  IsReadOnly="True"/>
        <!--<DataGridTextColumn Header="KeyIndex" Binding="{Binding KeyIndex}" IsReadOnly="True"/>--> <- What I did have...
        <DataGridTextColumn Header="FileName" Binding="{Binding FileName}" IsReadOnly="True"/>
        <DataGridTextColumn Header="ResourceName" Binding="{Binding ResourceName}" IsReadOnly="False"/>
        <controls:CollectionTextColumn Collection="ResourceStringList" Visibility="Collapsed"/>
    </DataGrid.Columns>
</DataGrid>

データセットの行が削除されたときに、列の番号を付け直したいKeyIndex。この再番号付けが行われると、更新されたセルをエレガントにフラッシュして、これらの値が更新されたことをユーザーに知らせたいと思います。

私は以下を作成しましたDataTemplate

<DataTemplate x:Key="readOnlyCellUpdatedStyle">
    <TextBlock Text="{Binding KeyIndex, NotifyOnSourceUpdated=True, Mode=TwoWay}">
        <TextBlock.Style>
            <Style TargetType="TextBlock">
                <Style.Triggers>
                    <EventTrigger RoutedEvent="Binding.SourceUpdated">
                        <BeginStoryboard>
                            <Storyboard>
                                <ColorAnimation Storyboard.TargetProperty="Background.Color" 
                                                Duration="0:0:0.3"
                                                From="White" 
                                                To="Red" 
                                                RepeatBehavior="3x" 
                                                AutoReverse="True"/>
                            </Storyboard>
                        </BeginStoryboard>
                    </EventTrigger>
                </Style.Triggers>
            </Style>
        </TextBlock.Style>
    </TextBlock>
</DataTemplate>

バインディングは引き続き機能しますが、ViewModel から値KeyIndexを更新すると、KayIndexアニメーションが発生して値が変化するだけです。が更新されたときにアニメーションが起動しないのはなぜですか?KeyIndex

御時間ありがとうございます。

4

1 に答える 1

2

NotifyOnTargetUpdatedとを使いたくなるでしょうBinding.TargetUpdated。また、最初に Background 値を設定することを忘れないでください。そうしないと、色をアニメーション化すると例外がスローされます。

  • Binding.SourceUpdated要素 -> オブジェクト
  • Binding.TargetUpdatedオブジェクト -> 要素

時々非常に混乱することがあります

<DataTemplate x:Key="readOnlyCellUpdatedStyle">
    <TextBlock Text="{Binding KeyIndex, Mode=TwoWay,NotifyOnTargetUpdated=True}">
        <TextBlock.Style>
            <Style TargetType="TextBlock">
                <Setter Property="Background" Value="White"/>
                <Style.Triggers>
                    <EventTrigger RoutedEvent="Binding.TargetUpdated">
                        <BeginStoryboard>
                            <Storyboard>
                                <ColorAnimation Storyboard.TargetProperty="Background.Color" 
                                    Duration="0:0:0.3"
                                    From="White" 
                                    To="Red" 
                                    RepeatBehavior="3x" 
                                    AutoReverse="True"/>
                            </Storyboard>
                        </BeginStoryboard>
                    </EventTrigger>
                </Style.Triggers>
            </Style>
        </TextBlock.Style>
    </TextBlock>
</DataTemplate>
于 2013-08-08T21:21:23.937 に答える