TT.DataForm: MVVM Support
Bei der Entwicklung von TT.DataForm habe ich besonderen Wert auf den MVVM-Support gelegt. Dies betrifft sowohl die Datenbindung, als auch die Operationen die der Benutzer über die Oberfläche auslösen kann. Hierfür stehen entsprechende Command-Eigenschaften bereit, mit denen einen ViewModel das Control steuern kann.
In manchen Fällen muss das ViewModel jedoch aktiv mit der DataForm kommunizieren. So sollte zum Beispiel vor dem Speichern der Änderungen die aktive Eingabe abgeschlossen werden, um den gerade eingegebenen Wert in die Datenquelle zu übertragen. Hierfür stellt DataForm die Methode AcceptChanges().
Da das ViewModel jedoch nicht direkt mit der Komponente kommunizieren kann, werden die wichtigsten Methoden in einem so genannten ActionCommand abstrahiert. Hierbei stellt das ViewModel eine Eigenschaft vom Typ ActionCommand zu Verfügung, die an die gleichnamige Eigenschaft der DataForm gebunden wird. Daraufhin kann das ViewModel über die ExecuteAction()-Methode die entsprechende Methode auf dem Command aufrufen, welche daraufhin an die DataForm weitergeleitet wird. ExcuteAction() nimmt den Typ der Methode in Form eines Wertes der DataFormAction-Enumeration entgegen. Die folgenden Werte stehen hierbei zu Verfügung:
View:
<dataform:DataForm
ActionCommand="{Binding ActionCommand}" />
ViewModel:
…
public ActionCommand ActionCommand { get; set; }
…
private void SaveChanges()
{
this.ActionCommand.ExecuteAction(
DataFormAction.AcceptChanges, null);
this.ActionCommand.ExecuteAction(
DataFormAction.SetBusy, null);
…
}
Der Wert DataFormAction.SetBusy bewirkt hierbei, dass alle Eingabefelder deaktiviert werden und der eingebaute BusyIndicator eingeblendet wird.
Der Wert DataFormAction.SetAvailable beendet die Animation wieder.
Zusätzlich bietet TT.DataForm die folgenden Eigenschaften, mit denen das Verhalten der Oberfläche konfiguriert werden kann.
Das Beispielprojekt, das in den Sourcen von TT.DataForm enthalten ist, zeigt die Verwendung der verschiedenen Mechanismen in einem MVVM-Szenario.
- AddCommand: Legt einen Command für die Neuanlage eines Datensatzes fest.
- RemoveCommand: Legt einen Command für das Entfernen von Datensätzen fest.
- SelectionButtonCommand: Legt den Command für die Auswahlschaltfläche von Bildern fest.
In manchen Fällen muss das ViewModel jedoch aktiv mit der DataForm kommunizieren. So sollte zum Beispiel vor dem Speichern der Änderungen die aktive Eingabe abgeschlossen werden, um den gerade eingegebenen Wert in die Datenquelle zu übertragen. Hierfür stellt DataForm die Methode AcceptChanges().
Da das ViewModel jedoch nicht direkt mit der Komponente kommunizieren kann, werden die wichtigsten Methoden in einem so genannten ActionCommand abstrahiert. Hierbei stellt das ViewModel eine Eigenschaft vom Typ ActionCommand zu Verfügung, die an die gleichnamige Eigenschaft der DataForm gebunden wird. Daraufhin kann das ViewModel über die ExecuteAction()-Methode die entsprechende Methode auf dem Command aufrufen, welche daraufhin an die DataForm weitergeleitet wird. ExcuteAction() nimmt den Typ der Methode in Form eines Wertes der DataFormAction-Enumeration entgegen. Die folgenden Werte stehen hierbei zu Verfügung:
- AcceptChanges: Übernimmt die über die Oberfläche durchgeführten Änderungen.
- DetachDataSource: Entfernt die Datenquelle und die zugehörigen UI-Elemente aus dem Control.
- Reset: Erstellt die Oberfläche anhand Datenquelle neu.
- SetBusy: Sperrt die Oberfläche und blendet den BusyIndicator ein.
- SetAvailable: Blendet den BusyIndicator aus und entsperrt die Oberfläche.
View:
<dataform:DataForm
ActionCommand="{Binding ActionCommand}" />
ViewModel:
…
public ActionCommand ActionCommand { get; set; }
…
private void SaveChanges()
{
this.ActionCommand.ExecuteAction(
DataFormAction.AcceptChanges, null);
this.ActionCommand.ExecuteAction(
DataFormAction.SetBusy, null);
…
}
Der Wert DataFormAction.SetBusy bewirkt hierbei, dass alle Eingabefelder deaktiviert werden und der eingebaute BusyIndicator eingeblendet wird.
Der Wert DataFormAction.SetAvailable beendet die Animation wieder.
Zusätzlich bietet TT.DataForm die folgenden Eigenschaften, mit denen das Verhalten der Oberfläche konfiguriert werden kann.
Eigenschaft | Beschreibung |
AllowAddNew | Bestimmt, die Neuanlage eines Datensatzes über das Steuerelement möglich sein soll. |
AllowRemove | Bestimmt, das Entfernen eines Datensatzes über das Steuerelement möglich sein soll. |
IsReadOnly | Bestimmt, ob das Steuerelement schreibgeschützt dargestellt werden soll. |
Error | Liefert den aktuellen Eigabefehler oder einen Leerstring zurück. |
HasError | Ruft ab, ob der aktuelle Datensatz Eingabefehler enthält. |
IsBusy | Legt fest, ob der Busy Indicator angezeigt werden soll. |
BusyIndicatorType | Legt den Typ des Busy Indicators fest. Zur Auswahl stehen Wheel, Dots und Custom. Bei letzterem Wert muss über die Eigenschaft BusyIndicatorTemplate ein benutzerdefiniertes Template bereitgestellt werden. |
Das Beispielprojekt, das in den Sourcen von TT.DataForm enthalten ist, zeigt die Verwendung der verschiedenen Mechanismen in einem MVVM-Szenario.
Labels: TT.DataForm