问题标签 [inotifydataerrorinfo]
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.
c# - 第二次打开带有用户控件的窗口时忽略 INotifyDataErrorInfo
我有一个相当混乱的情况:
我打开一个对话框,显示一个INotifyDataErrorInfo
立即返回错误的视图(当文本字段不为空时),我看到红色边框错误通知器:
开幕#1:
我什么都不做并关闭窗口,然后再次单击打开按钮:
开幕#2:
有没有搞错?我检查了错误标志,它已设置。当我删除文本并写回内容时,错误边框会重新出现,因为错误条件会检查string empty? error: no error
这是一个小的复制案例:
编辑:我添加了 ViewModel,它在每个节目中创建,导致 INCP 更改事件
主窗口.xaml.cs
主窗口.xaml
查看.xaml
我无法理解为什么边界会消失。
我发现:如果我每次都创建新视图(而不是单个资源实例),那么每次从一开始就可以使用红色边框。
我测试了将其移动INotifyDataErrorInfo
到一个单独的ViewModel
中,每次 new 时都会实例化 -> 不走运。
编辑 2:我在视图中添加了 HasError 标签以指示它一直显示错误
c# - WPF UI 控件无法正确验证 ErrorsChanged 事件
我在抽象基类中有以下 INotifyDataErrorInfo 实现。
在从基类派生的模型中,我实现了Task<ValidationResult> GetValidationResultAsync()
所需的方法,它使用流畅的验证 Nuget 包。
问题是,当我从 ViewModel 调用模型的ValidateAsync()
方法时,UI 输入控件没有正确无效/验证,我实际上有一个选项卡控件并验证选项卡索引中的模型已更改,一旦我更改,有些可能会显示红色边框选项卡但随后再次返回正常状态以进行下一个选项卡更改。
在调试中它显示该ValidationErrors
属性返回错误。
我的 XAML 输入控件代码如下所示。
[更新 1]
我应该提一下,我在MainWindow
一个选项卡控件和 3 个选项卡项中使用,每个选项卡项都是一个用户控件。
我连接到所有 XAML UserControls 的 Validation.Error 事件,我注意到即使我得到选项卡选择的索引更改值,Validation.Error 也会为第一个选项卡触发一次并且再也不会,我怀疑某处有清理是有原因的.
触发模型验证的 SelectedTabIndex 的代码。
ViewModel 中模型的ValidateModels
方法调用ValidateAsync
。
主窗口选项卡控件 XAML。
[更新 2]
添加自定义错误样式和自定义错误模板后,我看到控件工具提示停留在条件未满足错误但错误模板正在清除中。因此,TextBox 不显示错误模板,自定义或默认,但存在验证错误并且工具提示显示错误。
为什么 XAML 模板在 TabIndexChange 上清除,为什么它们至少在我正在查看的活动选项卡项上不刷新。这可能是我应该解决的问题。
此外,如前所述,除了第一次调用 SelectedTabIndex 设置器外,我没有看到 ErrorsChanged 重新验证控件。
我添加的模板。
c# - 是否可以结合使用 ValidationRules 和 INotifyDataErrorInfo 进行 wpf 验证?
在 WPF 中,有 3 种方法可以进行验证:
- 验证规则
IDataErrorInfo
INotifyDataErrorInfo
是否可以同时使用这些组合?出于我的需要,我想使用 INotifyDataErrorInfo 的灵活性来验证新规则,但不想干扰我想要验证的同一对象的现有 ValidationRules。
c# - 如何使用 INotifyDataErrorInfo 接口验证 Observable 集合
我正在WPF
使用模式开发应用程序MVVM
并使用Prism
框架。
我有一个基本数据类如下。
我在 ViewModel 中创建了上述数据类的 observable 集合。
我将这个可观察的集合绑定到视图中的列表框。
从上面的上下文中,我想验证“用户必须在列表框中选择至少一项”。换句话说,可观察集合中的一个类中的IsSelected
属性必须为真。ProductUmDecorator
ProductUmDecorators
目前我使用INotifyDataErrorInfo
接口和Data Annotations
验证规则。我已经失去了我应该如何实现我的问题来实现这个验证?
c# - 如何禁止对属性进行 INotifyDataErrorInfo 验证
我有一个类实现INotifyDataErrorInfo
我有一些带有错误通知的属性。例如,
这个类被许多其他类继承。一切正常。现在我有一个地方我不想在 UI 中显示特定操作的通知,并且在操作后需要通知。无论如何我可以抑制通知。
c# - WPF ListBox 数据验证
我有一个字符串项目的 ListBox,我想在每次添加或删除字符串时验证字符串。
下面是我拼凑在一起的代码,但问题是当 ObservableCollection 地址发生变化时,ValidateAddresses 永远不会被调用。
预期行为是,当发现无效字符串时,应在 ListBox 周围显示红色边框,并带有显示错误消息的工具提示。
这个 INotifyDataErrorInfo 设置适用于 TextBoxes,所以我不知道我在这里做错了什么。
视图模型
XAML
验证方法(从未调用)
c# - 将 INotifyDataErrorInfo 与模型中需要自定义验证的子对象一起使用
我正在尝试实现 INotifyDataErrorInfo 并且我的模型有一些自定义类型,这些类型需要根据它们的使用进行不同的验证。我不确定如何实施此验证。
我尝试在下面创建一个简单的示例,以显示我要完成的工作。我不是在寻找有关更改模型的建议,因为我的实际模型要复杂得多。
简单示例
我的示例模型适用于将有演示者和嘉宾的媒体活动。安排媒体活动时,用户将输入姓名、最少和最多演示者以及最少和最多来宾。通常,媒体必须至少有1名主持人且不超过5名,并且必须至少有10名嘉宾且不超过50名。
我有以下课程,取自在线示例,用作我的模型类的基础。
因为我在两个地方使用了最小值和最大值,所以我创建了以下类来存储最小值和最大值。这是我的例子中过于简单的部分,但应该明白这一点。
这是我的 MediaEvent 类,您可以看到它为 MinMaxPresenters 和 MinMaxGuests 使用了 MinMaxValues 类。
这是我的 MainWindow 的 XAML
在 App.xaml.cs 中使用
在 MediaEvent 类中,我使用 [Required] 和 [StringLength(10, MinimumLength = 5)] 属性修饰了 Name 属性。这些按预期工作。当输入的名称短于 5 个字符或长于 10 个字符时,我可以在名称文本框周围看到一个红色框,表明存在错误。
什么我想不通
现在我不确定如何验证 MinMaxPresenters.Min、MinMaxPresenters.Max、MinMaxGuests.Min 和 MinMaxGuests.Max
如果我用 [Range(1, 5)] 之类的东西装饰 MinMaxValues 类中的 Min 属性,我可以确认验证正在发生并且 UI 会相应地更新。
问题是验证适用于演示者和来宾的最小值。我需要为演示者和来宾验证不同的最小值。
我试过的
在 MediaEvent 中,我加入了 minMaxPresenters 的 PropertyChanged 事件。在那个事件处理程序中,我尝试根据演示者的规则(范围 = 1 到 5)验证 Min 和 Max 值。如果验证失败,我尝试添加到 _errors 集合。
在我的构造函数中,我添加了
然后创建了以下
当我输入超出演示者范围的最小值和最大值时,我可以看到我的错误被添加到模型中的 _errors 集合中,但我的视图并未表明存在任何错误。
我接近了吗?我对这一切都错了吗?
我还需要根据其他属性值验证值,因此需要进行自定义验证并通过代码添加错误。一个例子是验证上面的最大值。演示者的最大值需要小于 5,但也必须大于为最小值输入的值。
编辑
您可以忽略 MainWindow 中的按钮。只需单击并中断后面的代码,这样我就可以看到集合中有什么错误。
此外,如果有人评论公开 _errors,这只是尝试添加错误的快速方法。理想情况下,我会创建 AddError 和 RemoveError 方法。
c# - 在另一个控件上显示错误验证
我有 aTextBlock
和 a CheckBox
,因此:
在我的模型中,我正在实现INotifyDataErrorInfo
并验证复选框是否被选中。如果未选中,我将其视为错误:
当我ValidatesOnNotifyDataErrors
设置为 时true
,它会正确地在CheckBox
. 它看起来像这样:
我不希望出现红色复选框。为此,我明确设置ValidatesOnNotifyDataErrors
为false
. 这工作正常。
出现错误时我想做的是在 上显示错误TextBlock
,例如更改TextBlock
. 怎样才能TextBlock
知道上面存在的任何错误,CheckBox
最好的方法是什么?
我的预期结果是这样的:
wpf - 如何使用 CollectionView 收听 INotifyDataErrorInfo
我有以下情况:
XAML:
其中 Nodes 是ObservableCollection
包含 ListCollectionView 的自定义:
T
在这种情况下是一个Node
对象,具有许多属性,包括我感兴趣的属性(称为 NodeResults):
和NodeResults
:
ObservableValidatableModelBase
实现INotifyDataErrorInfo
,并将其错误存储在一个名为的集合中errors
:
我想要发生的是让Node
s 中的个人CollectionView
通知,以便它在屏幕上ListView
突出显示无效的个人条目(即具有无效的 a )。NodeResults
我的第一直觉是 Node 需要以某种方式订阅和冒泡NodeResults
'ErrorsChanged
事件,因此类BubbleErrorsChanged
上的方法ObservableValidatableModelBase
- 但这似乎不起作用。
另一种可能性是 - ListView 是否甚至有用于显示验证异常的默认模板?如果没有,这样的事情应该有效吗?(它没有……)
ValidationExceptionToColourConverter
根据错误是否存在,只需返回 Brushes.Red 或 Brushes.White即可Nothing
。
注意:将文本框直接绑定到 Nodes.NodeResults.SomeProperty 可以正常工作,给出我期望的结果。