WPF DataGrid - RowBackground & EnableRowVirtualization
-
Hallo Leute ...
Um eine Suche nach Begriffen in meinem DataGrid zu realisieren habe ich bisher einen BackgroundWorker genutzt, welcher die an das DataGrid gebundenen Daten durchsucht und in einer Liste (SearchDataClass.matchIdCollection) sammelt.
Über einen Button (SearchEditButton) möchte ich nun alle gefundenen Einträge farblich markieren:
foreach (Object question in dataGridView1.ItemsSource ) { foreach (XmlNode node in ((SearchDataClass)((FrameworkElement)parent).DataContext).matchIDCollection) { if (node.InnerText == ((XmlNode)question).InnerText) DGmarkAsSearchItem(question, MarkOptions.Mark); } } protected void DGmarkAsSearchItem(Object question, MarkOptions option) { DataGridRow row = dataGridView1.ItemContainerGenerator.ContainerFromItem(question) as DataGridRow; if (row != null) { switch (option) { case MarkOptions.Mark: { row.ToolTip = "Suchergebnis"; row.Background = Brushes.Violet; break; } case MarkOptions.Unmark: { row.ToolTip = null; row.Background = dataGridView1.RowBackground; break; } } } }
Dies klappt wunderbar, solange die Eigenschaft "EnableRowVirtualization" deaktiviert ist. Bei Aktivierung und einem anschließenden Scroll wird der Hintergrund jedoch auf Standard gesetzt.
Wie umgehe ich das, ohne die RowVirtualization zu deaktivieren ?
-
Bin den Umweg über die Events SelectionChanged, Loading- und Unloading Row gegangen, wobei eine entsprechendes Flag abgefragt wird.
Das funzt soweit ohne große Performanceprobleme.
Abschließend würde ich noch gerne erreichen, das alle gefundenen Rows an die oberste Stelle im DataGrid rutschen, oder alternativ alle "nicht Suchergebnisse" ausgeblendet werden. Row.Visibility greift aber hier nicht !?