In diesem Artikel beschreibe ich, wie das Data Binding in C# in einem WPF-Projekt funktioniert. Dadurch lÀsst sich das MVVM-Model (Model, View, ViewModel) realisieren.
Als kleines Beispiel dient hier ein Programm in dem der Status einer CheckBox an ein Property aus dem ViewModel gebunden wird.
Aufbau
In meinem Projekt gibt es einen Ordner Views fĂŒr die Views und einen Ordner ViewModels in dem sich alle ViewModels befinden. Dort befinden sich jetzt jeweils eine View bzw. ein ViewModel:
– Views
— MyView.xaml (und MyView.xaml.cs)
– ViewModels
— MyViewModel.cs
Viewmodel
ZunÀchst zum ViewModel. Zuerst braucht man einen PropertyChangedEventHandler, damit signalisiert werden kann, wenn sich was Àndert. Das Ganze kann auch bequem in eine Oberklasse ausgelagert werden und alle ViewModels erben dann von dieser Basisklasse.
NatĂŒrlich muss man auch noch das Property anlegen.
class MyViewModel : INotifyPropertyChanged
{
private bool isCheckBoxChecked;
public bool IsCheckBoxChecked
{
get
{
return this.isCheckBoxChecked;
}
set
{
if (this.isCheckBoxChecked != value)
{
this.isCheckBoxChecked = value;
this.NotifyPropertChanged("IsCheckBoxChecked");
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
public void NotifyPropertChanged(string propertyName)
{
if (this.PropertyChanged != null)
{
this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
public MyViewModel()
{
this.IsCheckBoxChecked = true;
}
}
Als letzten Schritt setze ich noch probehalber das Property im Konstruktor auf true, so dass beim Testen die CheckBox aktiviert sein mĂŒsste.
View
Aber zunÀchst zu View.
Im XAML wird eine CheckBox erstellt, welche den IsChecked-Wert mit eben erstelltem Property aus dem ViewModel verbindet.
<CheckBox IsChecked="{Binding IsCheckBoxChecked}" />
Damit das ganze funktioniert, mĂŒssen wir nun noch die View mit dem ViewModel verbinden. Dazu mĂŒssen wir den Kontext setzen:
public partial class MyView : Window
{
private MyViewModel mainViewModel;
public MyView()
{
InitializeComponent();
this.mainViewModel = new MyViewModel();
this.DataContext = mainViewModel;
}
}
Wir erstellen uns nÀmlich zunÀchst eine ViewModel-Instanz und legen den DataContext dann darauf.
Startet man das Programm nun, so wird die CheckBox markiert und der Status ist im ViewModel Ànderbar und abfragbar.