Как я могу обработать Validation.Error в моей ViewModel вместо кода моего View?
Я пытаюсь заставить валидацию WPF работать в шаблоне MVVM.
На мой взгляд, я могу проверить TextBox, как это, который обрабатывается методом code-behind "HandleError", который отлично работает:
<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>
Тем не менее, я хотел бы обработать проверку в моей ViewModel через DelegateCommand, но когда я пытаюсь сделать это с помощью следующего кода, я получаю явную ошибку "«{Binding HandleErrorCommand}» не является допустимым именем метода обработчика событий. Допустимы только методы экземпляра в сгенерированном классе или классе с выделенным кодом."
Есть ли обходной путь для этого, чтобы мы могли обрабатывать проверки в шаблоне MVVM?
Посмотреть:
<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