c# – 我如何处理ViewModel中的Validation.Error而不是后面的Vie
发布时间:2020-12-15 18:19:19 所属栏目:百科 来源:网络整理
导读:我正在尝试让 WPF验证在MVVM模式下工作. 在我的视图中,我可以验证像这样的TextBox,它由代码隐藏方法“HandleError”处理,工作正常: TextBox Width="200" Validation.Error="HandleError" TextBox.Text Binding Path="FirstName" NotifyOnValidationError="T
我正在尝试让
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 解决方法
我不知道这会对你有所帮助,但我会一直提供.
另外,我使用的是Silverlight,而不是WPF. 我没有在我的视图中指定任何验证,也没有在后面的代码和xaml中指定. My View只对ViewModel上的属性进行数据绑定. 我的所有错误检查/验证都由ViewModel处理.当我遇到错误时,我设置了一个ErrorMessage属性,该属性也绑定到视图. ErrorMessage文本块(在视图中)有一个值转换器,如果错误为null或为空,则会隐藏它. 以这种方式做事使得单元测试输入验证变得容易. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |