我试图让WPF验证在MVVM模式中工作。如何处理ViewModel中的Validation.Error而不是View的代码?
在我看来,我可以验证一个TextBox这样它获取的代码隐藏方法“的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>
视图模型:
#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
很高兴知道,这是我要带,因为在WPF验证目前似乎并没有那样直接或功能全,因为我认为这将是方向。 – 2009-05-29 07:54:00