Kolumne XAML Expertise: WPF und Windows-Apps

XAML-Tipp: WPF – das DataGrid Scrolling Behavior
Kommentare

In der Kolumne „XAML Expertise“ präsentiert Gregor Biswanger Top-How-tos zum Thema XAML. Einsteiger und fortgeschrittene XAML-Experten sollen hier durch geballtes Wissen gesättigt werden. Heute gibt es folgende Expertise: „WPF: Das DataGrid Scrolling Behavior“.

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

Windows DeveloperDieser 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. In unserem Shop ist der Windows Developer ferner im Abonnement oder als Einzelheft erhältlich.

Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -