Das Scrollen zu bestimmten Daten per Programmcode ist beim DataGrid eigentlich kein Problem. Dafür ist nur eine Zeile Code nötig:
datagrid.ScrollIntoView(datagrid.
SelectedItem);.
Etwas komplizierter wird es hingegen, wenn die Logik vom ViewModel ausgeführt werden soll und nicht von der Code-Behind-Datei. Denn ein direkter Zugriff auf das DataGrid ist nicht möglich. Eine elegante Lösung für das Problem wäre die Abhilfe mittels eigenem DataGrid Scrolling Behavior. Der Code dazu wird in Listing 1 gezeigt.
Behaviors haben sich allgemein zum Thema MVVM immer als sehr wertvoll erwiesen. So wird nur einmalig eine Logik geschrieben, die dann an unterschiedlichen UI-Stellen wiederverwendet werden kann. So zeigt Listing 2, wie das Behavior für das DataGrid festgelegt wird. Das ViewModel bleibt übersichtlicher und die Code-Behind-Datei verschont.
public class ScrollDataGridRowIntoView : Behavior { protected override void OnAttached() { base.OnAttached(); this.AssociatedObject.SelectionChanged += AssociatedObject_SelectionChanged; } void AssociatedObject_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (sender is DataGrid) { DataGrid datagrid = (sender as DataGrid); if (datagrid.SelectedItem != null) { datagrid.Dispatcher.BeginInvoke((Action)(() => { datagrid.UpdateLayout(); if (datagrid.SelectedItem != null) { datagrid.ScrollIntoView(datagrid.SelectedItem); } })); } } } protected override void OnDetaching() { base.OnDetaching(); this.AssociatedObject.SelectionChanged -= AssociatedObject_SelectionChanged; } }
<DataGrid> <i:Interaction.Behaviors> <support:ScrollDataGridRowIntoView /> </i:Interaction.Behaviors> ...
Windows Developer
Dieser Artikel ist im Windows Developer erschienen. Windows Developer informiert umfassend und herstellerneutral über neue Trends und Möglichkeiten der Software- und Systementwicklung rund um Microsoft-Technologien.
Natürlich können Sie den Windows Developer über den entwickler.kiosk auch digital im Browser oder auf Ihren Android- und iOS-Devices lesen. Außerdem ist der Windows Developer weiterhin als Print-Magazin im Abonnement erhältlich.
Modul ADOC – Architekturdokumentation – Softwarearchitekturen festhalten und kommunizieren
mit Stefan Zörner (embarc)
Modul FLEX – Flexible Architekturen: Microservices, Self-contained Systems und Continuous Delivery
mit Eberhard Wolff oder Niko Will (INNOQ)