UWP Compiled Function Binding

Wer sich vor den Converter Klassen und seinem IValueConverter Interface ekelt, wird sich über ein neues Feature in UWP (Universal Windows Platform) Compiled Bindings freuen. Für einfaches x: Bind an z.B. einen Textblock kann man nun eine Funktion direkt angeben. Da man mehrere Parameter übergeben kann, wie Propertys oder UI Control Eigenschaften erhält man damit auch automatisch ein Multibinding.

Etwas unglücklich muss die Methode auf der Klassenebene definiert sein wie die Bindung aktuell erfolgt. Eine Funktion der Page Klasse kann, so direkt im XAML angegeben werden. Wird allerdings in einer gebundenen Liste (Itemsource) die konvertierung benötigt, braucht die Model Klasse (MVVM) die Funktion. Im folgenden wird eine Windows Wetter App mit Hilfes des Openweather Service  gebaut. Die Visual Basic .NET Klasse wird analog zum JSON Objekt erstellt.

   1:  Public Class Liste
   2:      Public Property dt As Integer
   3:      Public Property temp As Temp
   4:      Public Property pressure As Single
   5:      Public Property humidity As Integer
   6:      Public Property weather As ObservableCollection(Of Weather)
   7:      Public Property speed As Single
   8:      Public Property deg As Integer
   9:      Public Property clouds As Integer
  10:      Public Property rain As Single
  11:      Public Property snow As Single
  12:      Public Function Int2Datum(s As Integer) As Date
  13:          Dim d = New DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)
  14:          Return d.AddSeconds(s/1000)
  15:      End Function
  16:  End Class

Da der Tag für den die Wettervorhersage gilt, in der JavaScript üblichen Zeitrechnung (Millisekunden seit 1.1.1970) übergeben werden muss diese per Methode Int2Datum konvertiert werden.

Im XAML der Page wird dann die Methode mit einem Property als Parameter angegeben.

   1:  <TextBlock Text="{x:Bind  int2Datum(dt),Mode=OneWay}"></TextBlock>
   2:  <TextBlock Text="{x:Bind  deg,Mode=OneWay}" Margin="0,50,0,0"></TextBlock>
 

Soweit so gut, nur hatte ich einen Fehler “Die 'int2Datum'-Eigenschaft wurde in Typ 'Liste' nicht gefunden”

image

Um ehrlich zu sein hatte ich Compiled Binding Functions auch erst wenige Male verwendet. Geschlagene zwei Stunden später, kam ich auf den Gedanken, das diese Feature erst mit dem Anniversary Update Einzug gehalten hat.

image

In den Projekteigenschaften von Visual Studio ( hier 2017) muss die Min. Version entsprechend hochgestuft werden.

Kommentare sind geschlossen