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

Schreibe einen Kommentar