Tengo un DataGrid que tiene sus datos actualizados por un proceso en segundo plano cada 15 segundos. Si alguno de los datos cambia, quiero ejecutar una animación que resalte la celda con el valor modificado en amarillo y luego volver a fundir el blanco. En cierto modo me-lo tengo de trabajar de la siguiente manera:Resaltar celdas en WPF DataGrid cuando el valor enlazado cambia
he creado un estilo con disparador de evento en Binding.TargetUpdated
<Style x:Key="ChangedCellStyle" TargetType="DataGridCell">
<Style.Triggers>
<EventTrigger RoutedEvent="Binding.TargetUpdated">
<BeginStoryboard>
<Storyboard>
<ColorAnimation Duration="00:00:15"
Storyboard.TargetProperty=
"(DataGridCell.Background).(SolidColorBrush.Color)"
From="Yellow" To="Transparent" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Style.Triggers>
</Style>
Y entonces se aplica a las columnas que quería poner de relieve si se modifica un valor
<DataGridTextColumn Header="Status"
Binding="{Binding Path=Status, NotifyOnTargetUpdated=True}"
CellStyle="{StaticResource ChangedCellStyle}" />
Si el valor del campo de estado en la base de datos cambia, la celda se resalta en amarillo como yo quiero. Pero hay algunos problemas.
Primero, cuando la cuadrícula de datos se carga inicialmente, toda la columna se resalta en amarillo. Esto tiene sentido, porque todos los valores se están cargando por primera vez, por lo que esperaría que TargetUpdated se disparara. Estoy seguro de que hay alguna forma en que puedo detener esto, pero es un punto relativamente menor.
El problema real es que toda la columna se resalta en amarillo si la cuadrícula está ordenada o filtrada de alguna manera. Supongo que no entiendo por qué un tipo causaría que TargetUpdated se activara ya que los datos no cambiaron, solo la forma en que se muestra.
Así que mi pregunta es (1) ¿cómo puedo detener este comportamiento en la carga inicial y ordenar/filtrar, y (2) estoy en el camino correcto y esto es incluso una buena manera de hacerlo? Debo mencionar que esto es MVVM.
Para organizar una solución alternativa a la que propone ... 1) ¿espera que la lista sea grande? (en este caso significa grande> = 100 elementos); y 2) ¿espera que el número de elementos en la lista cambie a menudo? –
Se trata esencialmente de una aplicación de cola de ayuda que enumera los errores en las transacciones y permite que las personas asuman un error específico y lo marquen como resuelto. Los valores no deberían cambiar tan a menudo, y espero que obtengan menos de 100 errores por día en producción. –
Muy bien, la idea de mostrar las diferentes celdas cambiando su fondo sin problemas cuando su contenido cambia, por ejemplo, cuando cambia el estado de la tarea o el asignado de la tarea es interesante ..., pero investigué un poco sobre eso y No encuentro la forma de que puedas hacer esto solo escribiendo Xaml. Lo que haría es escribir una colección de objetos de dominio en la memoria, y cada vez que recupere la lista del servidor, implemente métodos de utilidad que realicen la comparación de los datos recién recuperados con el que ya está en la cuadrícula de datos y que realicen el estilo cambia –