Kolumne: WPF und Windows-Apps

XAML-Tipp: UWP-Apps – Typsicheres Data Binding mit Compiled Data Binding
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: „Universal-Windows-Apps: Typsicheres Data Binding mit Compiled Data Binding“.

Das Data Binding bescherte XAML einen großen Mehrwert. Sogar die führende Webwelt übernimmt dieses Konzept und macht Frameworks wie AngularJS zum Superstar. Dennoch gibt es unter XAML einige Schattenseiten. So wird erst zur Laufzeit das Data Binding instanziiert. An welcher Stelle eventuell eine fehlerhafte Zuweisung stattfindet, ist nicht immer sofort ersichtlich. Eine Fehlersuche wird damit erheblich erschwert. Nicht nur das, sondern das Data Binding wird ebenfalls zur Laufzeit per Reflection instanziiert, was wiederum Speicher und Zeit kostet. Das bedeutet für große Anwendungen zusätzliche Performanceeinbußen, was bei mobilen Geräten zusätzlich die Akkulaufzeit verringert.

Universal-Windows-Apps: Typsicheres Data Binding mit Compiled Data Binding

Genau diese Schmerzen werden mit dem neuen Compiled-Data-Binding-Feature genommen. Wie der Name bereits verrät, wird das Binding beim Kompilieren fest verknüpft. Das verbessert nicht nur die Performance, sondern bietet ein typsicheres arbeiten. Zum Beispiel wirft Visual Studio einen Kompilierungsfehler, wenn ein Binding nicht aufgelöst werden kann.

Für das neue Binding-Feature wird die klassische „Binding“-Syntax durch eine „x:Bind“-Syntax ersetzt. Geändert hat sich zudem der Standardwert für den Binding Mode. Dieser ist bei Compiled Data Binding auf One-Time. Das bedeutet, dass die Daten vom ViewModel zur Oberfläche nur einmalig geladen werden und dann nicht mehr. Aus Performancegründen ist das oft elegant, aber nicht immer erwünscht. Zum Ändern des Standardwerts schreibt man wie bisher zusätzlich Mode=OneWay, sodass die Änderungen vom ViewModel zur Oberfläche weitergereicht werden, oder Mode=TwoWay für beide Richtungen.

Eine feste Bindung kann wie gewohnt mit Properties erfolgen. Der ungewohnte Aspekt hierbei ist, dass dies nur auf die Code-Behind der aktuellen View beschränkt ist. Beim Einsatz vom MVVM-Pattern wird bei der Code-Behind ein ViewModel-Property angelegt, und das Compiled Data Binding funktioniert. So dramatisch ist dieser Umweg nicht, denn für die Navigation und für das Verarbeiten von Dialogen musste das ViewModel in der Code-Behind ohnehin angezapft werden. Listing 1 und 2 zeigen den Einsatz von Compiled Data Binding in Kombination mit MVVP-Pattern.

 
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
  <TextBlock Text="{x:Bind ViewModel.Message, Mode=OneWay}" FontSize="42" />
</StackPanel>
 
public sealed partial class MainPage : Page
{
  public MainPageViewModel ViewModel { get; set; }

  public MainPage()
  {
    this.InitializeComponent();

    ViewModel = new MainPageViewModel();
  }
}

Software Architecture Summit 2017

The Core of Domain-Driven Design

mit Carola Lilienthal (Workplace Solutions)

Distributed Systems

mit Kyle Kingsbury (Independent Consultant)

Aufmacherbild: Pile of books on wooden background via Shutterstock / Urheberrecht: Africa Studio

Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -