Een van de leuke dingen van WPF is dat de UI automatisch kan aangepast worden als de data veranderd (en omgekeerd ook). In het onderstaande voorbeeld wordt de test-tekst omgedraaid als er op geklikt wordt:
Public Property TestTekst As String = "Dit is een simpele test..."
Private Sub OnEvent__TextBlock_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Input.MouseButtonEventArgs) TestTekst = StrReverse(TestTekst) NotifyPropertyChanged("TestTekst") End Sub
#Region
"INotifyPropertyChanged implementation" Private Event PropertyChanged(ByVal sender As Object, ByVal e As System.ComponentModel.PropertyChangedEventArgs) Implements INotifyPropertyChanged.PropertyChanged
Protected Sub NotifyPropertyChanged(ByVal sender As Object, ByVal propertyName As String) RaiseEvent PropertyChanged(sender, New PropertyChangedEventArgs(propertyName)) End Sub Private Sub NotifyPropertyChanged(ByVal propertyName As String) NotifyPropertyChanged(Me, propertyName) End Sub #End Region End Class
In het bovenstaande voorbeeld is de OnEvent_TextBlock_MouseDown-functie verantwoordelijk voor het aanroepen van de NotifyPropertyChanged-functie. We kunnen deze verantwoordelijkheid ook geven aan de TestTekst-Property als volgt:
Imports System.ComponentModel
Class MainWindow Implements INotifyPropertyChanged
Protected _TestTekst As String = "Dit is een simpele test..."
Public Property TestTekst As String Get Return _TestTekst End Get Set(ByVal value As String) _TestTekst = value NotifyPropertyChanged("TestTekst") End Set End Property
Private Sub OnEvent__TextBlock_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Input.MouseButtonEventArgs) TestTekst = StrReverse(TestTekst) NotifyPropertyChanged("TestTekst") End Sub
#Region
"INotifyPropertyChanged implementation" Private Event PropertyChanged(ByVal sender As Object, ByVal e As System.ComponentModel.PropertyChangedEventArgs) Implements INotifyPropertyChanged.PropertyChanged
Protected Sub NotifyPropertyChanged(ByVal sender As Object, ByVal propertyName As String) RaiseEvent PropertyChanged(sender, New PropertyChangedEventArgs(propertyName)) End Sub Private Sub NotifyPropertyChanged(ByVal propertyName As String) NotifyPropertyChanged(Me, propertyName) End Sub #End Region End Class
08-06-2011, 00:00
Geschreven door Fibergeek
Categorie:Code: WPF
07-06-2011
Mijn begin met WPF (Data Binding)
Het is nu al bijna een jaar geleden dat ik met WPF (Windows Presentation Foundation) begonnen ben. Echter, ik ben het meeste al weer vergeten. Het is aanpassen . Eens de "basics" van Data-Binding herbekijken...
Een simpel programma, een tekst in het midden van het scherm:
We kunnen de TestTekst-variable ook verhuizen naar het Application-blok (met als voordeel dat deze variable nu gebruikt kan worden in andere schermen):
Het is ook mogelijk om deze tekst te laten komen uit een variable uit de bijhorende Window-class. De DataContext van het window moet dan naar zichzelf wijzen:
MainWindow Public Property TestTekst As String = "Dit is een simpele test..." End Class
Maar omdat de Designer nu de inhoud van de TestTekst zelf niet kan bepalen wordt deze niet weergegeven. Vreed lastig dus tijdens de ontwikkeling van de schermen. Dit kan men oplossen door een FallbackValue in te stellen. Hetzelfde programma als hierboven maar het TextBlock in het Window-blok is een klein beetje aangepast: