我正在尝试让
WPF验证在MVVM模式下工作.
在我的视图中,我可以验证像这样的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>
但是,我想通过DelegateCommand处理我的viewmodel中的验证,但是当我使用以下代码尝试它时,我得到显式错误“'{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