x:Bind trifft DataContext

Eine der wesentlichen Änderungen von XAML in Windows 10 UWP vs WPF sind die kompilierten Bindings per x:Bind. Diese werden echt vorkompiliert und müssen passende Datentypen haben. Neben der damit mutmaßlich verbesserten Performance gibt es ein Reihe von netten Features. Aber man muss auch auf einiges verzichten.

Mein Lieblingsfunktion ist das Binden von Methoden an z.B. einen Button. Wenn man ganz ehrlich ist, dann sind die nötigen ICommand Interfaces aus WPF oder Silverlight ein wenig schräg. Auch das Konstrukt das Viewmodell mit dem Datacontext (in Xamarin abweichend BindingContext) zu mappen, ist wenig intuitiv.

Der Ansatz von UWP ist das Viewmodel als Property der Page zu definieren und instanziieren. Etwas was man z.B. in späteren Angular.JS mit der ControllerAS Syntax konzeptionell auch findet. Scheint also ein Trend zu sein.

   1:  <Button x:Name="button" Content="Button" 
   2:                      Click="{x:Bind mydx.button1}"

Allerdings braucht man häufig auch die alte Syntax mit {Binding} um erweiterte Attribute wie adhoc Bindung bei Änderung.

   1:  <TextBox Text="{Binding test.name,UpdateSourceTrigger=PropertyChanged}"

Wie verwendete man beides parallel mit nur einer Instanz des Viewmodels?

Im XAML Code wird herkömmlich das Viewmodel deklarativ erzeugt und dem Datacontext zugewiesen.

   1:  <Page.DataContext>
   2:          <local:ClassVM></local:ClassVM>
   3:  </Page.DataContext>

In Konstruktor Codebehind der XAML Page wird dann der Datacontext einfach dem Property der Page zugewiesen

   1:  Public NotInheritable Class MainPage
   2:      Inherits Page
   3:      Public Property mydx As ClassVM
   4:      Public Sub New()
   5:          InitializeComponent()
   6:          mydx = Me.DataContext
   7:      End Sub
   8:  End Class
Kommentare sind geschlossen