问题标签 [idataerrorinfo]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
886 浏览

wpf - 需要验证已实现 IDataErrorInfo 的类中的所有属性

我有一个 WPF 窗口,其中包含我的类“项目”的数据上下文。当用户在 TextBox 中键入时,验证会毫无问题地触发。当用户单击“保存”时,我需要验证此 TextBox 以及在此绑定类中设置的所有其他属性。

我不相信 UpdateSourceTrigger 是我正在寻找的东西,尽管我将它设置为 PropertyChanged 以供用户实际在该字段上进行数据输入时使用。

我宁愿不将我的所有属性设置为保存单击上的相应 UI 控件以强制更新属性,但我可以。

谢谢!

0 投票
3 回答
4396 浏览

wpf - Validation.HasError 如果在已经为 true 的情况下出现新错误,则不会再次触发

我使用 MVVM,我的对象实现了 IDataErrorInfo。设置属性后,我运行自定义验证方法,如果验证通过,我返回 String.empty,它将 Validation.HasError 设置为 false。如果验证失败,则 Validation.HasError 设置为 true。我有一种用于“必需控件”(将执行验证的控件)的样式,并将控件的工具提示设置为如下错误:

和错误转换器:

问题是这样的:用户输入了无效的内容......并且 Validation.HasError 设置为 true。工具提示会按预期更新。如果用户尝试更正错误,但输入的值会导致不同类型的失效,则工具提示应显示新的错误字符串,但这不会发生。该错误显示为与第一个错误相同的错误。我知道为什么会发生这种情况(我认为)......因为没有触发触发器,因为 Validation.HasError 永远不会从 True -> False -> True 改变。

有没有人对此有任何经验或关于如何强制触发的一些建议?

0 投票
4 回答
2330 浏览

silverlight - S/L 4 & IDataErrorInfo - 如何强制重新验证控件(触摸相关控件时)

我有两个控件绑定到属性 MinCartValue 和 MaxCartValue。MinCartValue 必须小于 MaxCartValue。为了实现这个验证,我实现了 IDataErrorInfo 接口,如果 MinCartValue 或 MaxCartValue 被触及,则在 this[columnName] 方法中运行上述检查。ValidatesOnDataErrors=True 在两个控件的绑定中设置。验证正常工作,当对其属性值的更改违反规则时突出显示每个控件。问题是一旦一个控件被标记为无效,如果用户通过更改另一个控件的值来纠正问题,第一个控件仍然被标记为无效。这是可以理解的,因为 IDataErrorInfo 方法没有对第一个控件的属性进行验证。

因此,我需要一种在验证属性#2 时强制重新验证属性#1 的方法(或清除无效状态的方法),反之亦然。我曾尝试在我的 this[columnName] 方法中调用 RaisePropertyChanged,但它什么也没做。还尝试将属性设置为它自己的值以试图欺骗它来验证自己,但同样没有任何反应。

谢谢

0 投票
1 回答
1427 浏览

wpf - 如果模型中的验证有错误,则禁用按钮

嗨,我对模型类中的错误进行了验证。

我在视图模型中使用这个模型类,并将模型类的 Nick 属性绑定到组合框控件的 Text 属性。

此外,我在视图中的按钮单击事件上从视图模型类绑定方法 LogOn。如果模型类中的验证有错误,我想禁用按钮:

查看型号:

如果 CurrentUser(对象)属性中的验证有错误,则解决方案很简单,将 CanLogOn 属性设置为 false。

但我不知道模型类中的通知属性 CanLogOn 不是错误的。我运行应用程序并且按钮仍然被禁用。

我需要在模型中实现这种行为:

有什么建议吗?谢谢。

0 投票
1 回答
2603 浏览

.net - WPF 中的跨属性验证

目前我正在使用该IDataErrorInfo接口在 WPF 应用程序中实现验证。作为该接口一部分的索引器允许验证单个属性,如下所示:

如果发生验证错误,我会在文本框旁边显示一个带有工具提示的星号。

如果我有与单个属性不严格相关的验证规则,我该怎么办?例如,如果代表订单的域实体具有发货日期和发票日期,并且我想验证发票日期必须晚于或等于发货日期的规则?

当然,我也可以通过检查关系两次,一次用于 columnName“ShippingDate”,一次用于 columnName“InvoiceDate”,然后在 UI 的两个输入字段中用星号标记错误,我也可以将这个规则强制到索引器中,如下所示:

但我更愿意独立于索引器进行“对象级别”或“交叉属性”验证(索引器应该只报告无效的“单一属性状态”)并在 UI 上分别显示这些对象级别或关系错误。

我希望接口的Error属性IDataErrorInfo可能具有对象级别验证的目的。ValidatesOnDataErrors=True例如,当我在 TextBox 的 Binding 表达式中指定时,WPF 会调用索引器进行属性验证。Error但是每当我更改输入字段中的某些数据时,我都找不到一种方法来告诉 WPF 调用该属性。也许我对这个属性的目的的猜测是错误的?

如何在 WPF 中实现跨属性验证?

提前感谢您的建议!

0 投票
15 回答
15876 浏览

wpf - WPF DataGrid 验证错误未清除

所以我有一个 WPF DataGrid,它绑定到一个ObservableCollection. 该集合通过 对其成员进行验证IDataErrorInfo。如果我以一种无效的方式编辑一个单元格,然后在按 Enter 之前将其移开,然后返回并使其有效,则该单元格将停止显示无效,但是,“!” 行首仍将存在,并且ToolTip将引用先前的无效值。

0 投票
1 回答
1793 浏览

wpf - How can I trigger this Error Template?

Below is a template that works from a binding perspective, but the error template doesn't show, and without an AdornedElementPlaceholder the result looks a bit garish.

My view models implement IDataErrorInfo, and normally I would trigger the error template by having ValidatesOnError=True as part of my binding. This particular view model is display only, so the IDataErrorInfo indexer is never invoked. I do have a number of useful properties related to validation though, including a boolean IsValid property as well as IDataErrorInfo.Error, both of which properly respond to the view model being invalid.

Should I translate the error to a ValidationResult and trigger it that way? Or is there something easier?

Cheers,
Berryl

current template

UPDATE

Ok, I am getting IDataErrorInfo to kick in just by changing my binding to include ValidatesOnErrors, BUT the error template still does not show up.

Here is the binding

0 投票
1 回答
585 浏览

c# - 带有 XML 文件的 ObservableCollection 和 IDataErrorInfo

MainWindow() 和 GetXmlData() 工作正常并在 gridview 上显示 xmlfile。但是当我包含 XmlNode :IDataErrorInfo 类时,它停止工作。

我喜欢让所有这些都工作以显示和验证网格视图。任何人都可以发现我想念的东西吗?或者解释一下,我在这里停下来。这似乎是 observablecollection 之间的错误。

0 投票
1 回答
1226 浏览

.net - Enterprise Library 5.0,抽象基类中的验证

我的业务层使用了一个名为 DomainObject 的抽象基类,它实现了 IDataErrorInfo 来为 WPF 提供验证绑定。当我调用基类中实现的“错误”属性时,没有发现错误(我的测试产生了两个验证错误)。如果我覆盖派生类中的属性,一切都会按预期工作,并且会发现验证错误。我的猜测是“ValidateFromAttributes”方法中的反射问题......?

我的示例应该返回两个错误。

这是我的代码:

这是单元测试:

0 投票
2 回答
243 浏览

wpf - 从 3.5 面向 4.0 版的 wpf 影响 IDataErrorInfo 实现

我有一个使用 3.5 版实现 IDataErrorInfo 的 MVVM 应用程序。我想尝试以 4.0 为目标,因此修改了目标框架设置并更改了一些位(BitmapFrames 等)。大多数事情看起来都很好,过程也相对轻松,直到我注意到 IDataErrorInfo 的实现受到了影响。

我的验证控制模板如下所示:

并在这样的文本框样式中使用:

在我的 ViewModel 中,GetValidationError(string propertyName) 使用一个开关根据我的规则验证适当的属性。

问题是一旦验证被触发,它就不会更新。例如,可以根据需要设置字段。加载后,必填字段将通过相应的消息标记为无效。以前,当输入仍然无效的值时,工具提示中的错误消息会更新。但是,这不再有效,并且错误消息仍保留为空值消息。

有谁知道 4.0 中 IDataErrorInfo 的实现有什么变化可以解释这一点?知道如何解决吗?