2013-08-08 6 views
1

Все У меня есть следующая DataGridWPF Анимация не розжиг

<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> 

Связывающую все еще работает на KeyIndex, но когда я обновить KayIndex значения из ViewModel Теперь анимации происходит значение только изменения. Почему анимация не срабатывает при обновлении KeyIndex?

Спасибо за ваше время.

ответ

2

Вы должны использовать NotifyOnTargetUpdated и Binding.TargetUpdated. И не забудьте сначала установить значение фона, или анимировать цвет, создаст исключение.

  • Binding.SourceUpdated Element -> Object
  • Binding.TargetUpdated Object -> Элемент

Это может быть очень запутанным иногда

<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> 
+0

Это качество, право летучей мыши. Теперь у меня есть проблема, что это обновление, когда данные сначала загружаются в 'DataGrid' любую идею, как предотвратить это? – MoonKnight

+0

Пс. Спасибо за ваше время. – MoonKnight

+0

Хмм ... это может быть немного сложно, –

Смежные вопросы