Wie kann ich mit einer Validierung.Fehler in meinem ViewModel und nicht in meiner Sicht der code hinter?
Ich versuche, WPF-Validierung, um die Arbeit innerhalb des MVVM-Muster.
Meiner Ansicht, die ich überprüfen kann, ob ein Textfeld, wie dies gehandhabt werden durch die code-behind-Methode "HandleError", die gut funktioniert:
<TextBox Width="200"
Validation.Error="HandleError">
<TextBox.Text>
<Binding Path="FirstName"
NotifyOnValidationError="True"
Mode="TwoWay">
<Binding.ValidationRules>
<validators:DataTypeLineIsValid/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
Allerdings würde ich mag zu behandeln, die Validierung in meinem ViewModel über ein DelegateCommand aber wenn ich versuche es mit dem folgenden code, bekomme ich die explizite Fehler "'{Binding HandleErrorCommand}' ist keine gültige event-handler-Methode name. Nur Instanzen-Methoden des generierten oder code-behind-Klasse gültig sind."
Gibt es Abhilfe für diese, so dass wir verarbeiten kann, Validierungen innerhalb eines MVVM-pattern?
Anzeigen:
<TextBox Width="200"
Validation.Error="{Binding HandleErrorCommand}">
<TextBox.Text>
<Binding Path="FirstName"
NotifyOnValidationError="True"
Mode="TwoWay">
<Binding.ValidationRules>
<validators:DataTypeLineIsValid/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
ViewModel:
#region DelegateCommand: HandleError
private DelegateCommand handleErrorCommand;
public ICommand HandleErrorCommand
{
get
{
if (handleErrorCommand == null)
{
handleErrorCommand = new DelegateCommand(HandleError, CanHandleError);
}
return handleErrorCommand;
}
}
private void HandleError()
{
MessageBox.Show("in view model");
}
private bool CanHandleError()
{
return true;
}
#endregion
InformationsquelleAutor Edward Tanguay | 2009-05-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich weiß nicht, ob dies wird Ihnen helfen, aber ich biete es trotzdem.
Auch, ich bin mit Silverlight, nicht WPF.
Ich nicht angeben, eine Validierung an meinen Ansichten, weder im code noch hinter den xaml-Code. Meine Ansicht hat nur Daten, die Bindungen an Eigenschaften im ViewModel.
Alle meine Fehler überprüfung/Validierung erfolgt durch das ViewModel. Wenn ich ein Fehler auftreten, habe ich eine ErrorMessage-Eigenschaft, die gebunden ist an die Ansicht. Die ErrorMessage textblock (in der view) einen Wert hat, der Konverter versteckt es, wenn der Fehler ist null oder leer.
Dinge zu tun auf diese Weise macht es einfach unit-Tests Validierung von Eingaben.
InformationsquelleAutor Matt Brunell
Hier ist ein Weg, um dies zu tun, die mit Expression Blend 3 Verhaltensweisen. Ich schrieb eine ValidationErrorEventTrigger, weil die built-in EventTrigger funktioniert nicht mit angeschlossenen Veranstaltungen.
Anzeigen:
ViewModel: (konnte nicht geändert werden, aber hier ist ein Blick darauf, wie ich grub in der Validierung Argumente zu finden, die Fehlermeldung, wenn mit der Ausnahme Gültigkeitsregel)
ValidationErrorEventTrigger:
Vielen Dank, der code unten hat bei mir <MVVMBehaviors:ValidationErrorEventTrigger> <cmd:EventToCommand Command="{Binding ValidationErrorCommand}" PassEventArgsToCommand="True" /> </MVVMBehaviors:ValidationErrorEventTrigger>
InformationsquelleAutor Ben Reierson