Ho un DataGrid che ha i suoi dati aggiornati da un processo in background ogni 15 secondi. Se uno qualsiasi dei dati cambia, voglio eseguire un'animazione che evidenzia la cella con il valore modificato in giallo e quindi tornare al bianco. I sorta-di l'ho lavorare nel modo seguente:Evidenzia celle in WPF DataGrid quando il valore associato cambia
ho creato uno stile con trigger di evento su 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>
E poi applicata alle colonne che volevo mettere in evidenza se un valore cambia
<DataGridTextColumn Header="Status"
Binding="{Binding Path=Status, NotifyOnTargetUpdated=True}"
CellStyle="{StaticResource ChangedCellStyle}" />
Se il valore per il campo di stato nelle modifiche del database, i punti salienti delle celle in giallo, proprio come voglio. Ma ci sono alcuni problemi.
Per prima cosa, quando la griglia di dati viene inizialmente caricata, l'intera colonna viene evidenziata in giallo. Questo ha senso, perché tutti i valori vengono caricati per la prima volta, quindi ti aspetteresti che TargetUpdated sia attivato. Sono sicuro che c'è un modo in cui posso fermarlo, ma è un punto relativamente secondario.
Il vero problema è che l'intera colonna è evidenziata in giallo se la griglia è ordinata o filtrata in alcun modo. Suppongo che non capisco perché un ordinamento potrebbe causare l'attivazione di TargetUpdated poiché i dati non sono cambiati, solo nel modo in cui viene visualizzato.
Quindi la mia domanda è (1) come posso interrompere questo comportamento sul caricamento iniziale e ordinare/filtro, e (2) sono sulla strada giusta e questo è anche un buon modo per farlo? Dovrei menzionare questo è MVVM.
Per organizzare una soluzione alternativa a quella che si propone ... 1) ti aspetti che la lista sia grande? (in questo caso significa grande> = 100 articoli); e 2) ti aspetti che il numero di articoli nella lista cambi spesso? –
Si tratta essenzialmente di un'applicazione della coda dell'helpdesk che elenca gli errori sulle transazioni e consente alle persone di assumere la proprietà di un errore specifico e contrassegnarlo come risolto. I valori non dovrebbero cambiare così spesso, e spero che ricevano meno di 100 errori al giorno in produzione. –
OK, ho trovato l'idea di mostrare le diverse celle cambiando lo sfondo senza problemi quando il loro contenuto cambia, ad esempio, quando cambia lo stato dell'attività o l'assegnatario dell'attività ..., ma ho fatto qualche ricerca su quello e Non trovo il modo in cui puoi farlo solo scrivendo Xaml. Quello che vorrei fare è scrivere una raccolta degli oggetti del dominio in memoria, e ogni volta che recuperi l'elenco dal server, implementa metodi di utilità che eseguono il confronto dei dati appena recuperati rispetto a quello che è già presente nel datagrid ed esegui lo stile cambia. –