验证应用程序块 5 和 WPF 视图模型

发布于 2024-11-05 05:16:46 字数 736 浏览 0 评论 0原文

我的问题非常基本,与使用企业库验证应用程序块 5.0 验证视图模型中的对象有关。

似乎当用户输入无效数据时,虽然 UI 显示控件的错误模板,但控件绑定到的视图模型中的属性不会更新。

这是一个问题,因为我想在视图模型中的保存按钮命令中调用此类代码

ValidatorFactory factory = EnterpriseLibraryContainer.Current.GetInstance<ValidatorFactory>();
myValidator = factory.CreateValidator<Customer>();

ValidationResults results = myValidator.Validate(this.CustomerProperty);
if (!results.IsValid)
{
    // etc
}

来检查数据是否有效。

我遇到的问题的例子。

例如 如果我有一个文本框绑定到虚拟机中的字符串属性,并带有字符串长度验证器(最小长度 1,最大长度 10),则可能会发生以下情况;

  1. 输入文本“ABC”。 UI 不显示错误。 查看模型属性更新为“ABC”。
  2. 删除文本框的内容(因此现在无效)。 UI 现在显示错误(很好)。 但视图模型属性现在与 UI 不同步。视图模型中的属性仍设置为 ABC。
  3. 由于视图模型数据仍然有效,保存验证仍将通过。

我应该怎么做?

My question is quite basic and to do with validating an object in your view model using enterprise library validation application block 5.0.

It seems that when a user enters invalid data, whilst the UI displays the error template for a control, the property in the view model that the control is bound to does not get updated.

This is a problem as I wanted to call code such as this

ValidatorFactory factory = EnterpriseLibraryContainer.Current.GetInstance<ValidatorFactory>();
myValidator = factory.CreateValidator<Customer>();

ValidationResults results = myValidator.Validate(this.CustomerProperty);
if (!results.IsValid)
{
    // etc
}

in my save button command in the view model to check that the data is valid.

Example of problem I'm having.

e.g.
If I have a textbox bound to a string property in the vm with a string length validator (min length 1, max 10) then the following could happen;

  1. Enter text of 'ABC'.
    UI does not show error.
    View model property updated to 'ABC'.
  2. Delete contents of textbox (so now invalid).
    UI now shows error (good).
    But view model property is now out of sync with UI. Property in the view model is still set to ABC.
  3. Save validation will still pass as the view model data is still valid.

How should I be doing this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

戒ㄋ 2024-11-12 05:16:46

为了解决这个问题,我最终删除了validationRule(按照EntLib 5动手实验文档中的示例)并在我的Customer类中实现了IDataErrorInfo。

然后,我更改了 XAML,并在文本框绑定中添加了

ValidatesOnDataErrors=True

This,然后按照我的预期验证了我的对象。即无效数据被传播到视图模型属性,然后我可以在保存命令中验证该属性。

To solve this I ended up removing the validationRule (as per the example in the EntLib 5 hands-on labs documentation) and implemented IDataErrorInfo in my Customer class.

I then changed my XAML and in my textbox binding added

ValidatesOnDataErrors=True

This then validates my object as I'd expect. i.e. Invalid data is propagated to the view model property which I can then validate on my save command.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文