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: PublicClass Liste
2: PublicProperty dt AsInteger
3: PublicProperty temp As Temp
4: PublicProperty pressure AsSingle
5: PublicProperty humidity AsInteger
6: PublicProperty weather As ObservableCollection(Of Weather)
7: PublicProperty speed AsSingle
8: PublicProperty deg AsInteger
9: PublicProperty clouds AsInteger
10: PublicProperty rain AsSingle
11: PublicProperty snow AsSingle
12: PublicFunction Int2Datum(s AsInteger) AsDate
13: Dim d = New DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)
14: Return d.AddSeconds(s/1000)
15: EndFunction
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: <TextBlockText="{x:Bind int2Datum(dt),Mode=OneWay}"></TextBlock>
2: <TextBlockText="{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”
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.
In den Projekteigenschaften von Visual Studio ( hier 2017) muss die Min. Version entsprechend hochgestuft werden.