问题标签 [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.

0 投票
1 回答
342 浏览

wpf - INotifyDataErrorInfo 仅在需要时触发

我已经在我的模型上实现了 INotifyDataErrorInfo。但我似乎无法在需要时使用它。例如。它不应该在启动时或我打字时验证错误。仅当单击按钮(保存)时。

我目前在我的 XAML 中有这个:

在 SaveCommand 下的 ViewModel 中:

我的模型如下所示:

然后是我对 ValidateModelBase 的实现:

事情是它正常工作,但是当窗口打开时,文本框已经是红色的。我希望它在启动时忽略验证,仅在我单击保存时验证。单击保存时,它将验证并查看是否有任何错误。出现错误时,将设置验证(现在应标记为红色)并且窗口保持打开状态。我怎样才能做到这一点。

0 投票
0 回答
77 浏览

wpf - 控件中的控件模板会影响 UI 验证中的其他控件

我非常精通 WPF,但对实现 UI 验证的领域很陌生,我需要确保某些值已准备好保存到数据库。在我非常大的应用程序中,我有很多不同类型的验证,其中包括简单的单个(TextBox 需要一个值或最少字符)、(必须选择项目)、(必须选择至少一个选项)等等。我已经使用 INotifyDataErrorInfo 实现了验证,并且效果非常好,除了一些我正在绕圈子并需要一些指导的问题。事实上,这可能更多的是样式问题。以下只是我的问题之一,但如果我解决了这个问题,那么它可能会解决其他问题,所以我现在会坚持这个:我有一组单选按钮控件,其中一个必须由用户选择,但我不希望默认选择任何一个,因此被迫做出选择。在他们选择一个之前,需要在堆栈面板中的单选按钮周围显示一个红色边框。因为这是我想在我有一组控件的几个地方做的事情,所以我认为创建一个名为 ErrorBorderControl 的边框控件会很好,它使用属性管理数据错误,然后将项目弹出到该控件中。我在这个名为 ValidationObject 的对象类型的控件上创建了一个 DependecyProperty,它只需要一个可以测试以查看是否有错误的属性。这完美地工作,并且在未选择时显示红色边框,而不是在选择时显示。到目前为止很棒。然而,ErrorBorderControl 中定义的 ControlTemplate 会渗入 UI 中所有其他基于边框的控件,包括 RadioButton 控件周围的边框。我经常使用样式并了解范围,但这很奇怪。以下是我所做的,虽然作为第一次尝试非常基本:

用户控制:

代码背后:

执行:

输出:

无效选择

请注意,看起来模板虽然在用户控件中定义,但正在影响其他控件中的其他边框控件。看看我何时做出选择:

有效选择

红色的控件不参与验证。另一个控件中的控件模板如何影响所有边框?我只是不明白。我需要做的是定义一个模板,我可以将其应用于我希望它仅应用于的控件,并且能够重复使用它。

0 投票
1 回答
917 浏览

wpf - WPF ListView 项数据验证

我需要有用户将定期附加/编辑的连接字符串列表。所以我定制了列表视图,它是数据绑定到一个可观察的集合。

我添加了 Binding.ValidationRules,它在字段为空时突出显示。现在我必须添加验证来验证连接字符串,如果任何失败都应该突出显示给用户以更改凭据或任何连接字符串参数。我尝试使用 INotifyDataErrorInfo 但无法成功或不知道如何正确使用它。它将整个列表视图突出显示为边框,并且对于有效的连接字符串也保持不变。

我需要向用户突出显示 UI 中有效或无效的连接字符串,而不是突出显示整个列表视图或抛出任何消息框。验证应该在后台发生,而不是通过任何其他事件(如按钮单击等)。这怎么可能正确实现。

0 投票
1 回答
531 浏览

c# - 何时调用 INotifyDataErrorInfo GetErrors()?

我为 WPF 的 INotifyDataErrorInfo 找到的文档似乎指出,当通过 UI 设置值或调用 INotifyDataErrorInfo 的 ErrorsChanged 事件时调用 GetErrors() 方法。

但这与我在调试其 DataContext 是实现 INotifyDataErrorInfo 的视图模型的窗口时看到的不匹配(有问题的视图模型是基于 Mvvm Light 构建的)。

相反,GetErrors() 会在窗口初始化并设置其 DataContext 时调用,但之后在 viewmodel 代码引发 ErrorsChanged 事件时调用。在我的情况下,每当在视图模型中设置某些属性时,它都会通过我编写的代码来引发 ErrorsChanged 事件。

我问这个问题是因为我想知道是否需要处理 WPF 可能调用 GetErrors() 的情况,而我没有先调用验证代码。这可能会错误地报告不存在错误,而实际上只是这种情况,因为尚未进行验证。

0 投票
1 回答
686 浏览

wpf - WPF 如何手动设置控件的 Validation.HasError 属性?

我有一个 wpf 窗口,当用户与控件交互时触发验证(进入控件并更改导致更新属性的值)并且在属性更改时,验证触发并按应有的方式显示。

但是,当用户单击保存按钮而不遍历控件时,我想在屏幕上手动显示所有验证错误,否则如果用户加载屏幕并单击保存按钮,它应该如何看待。

即使我创建了像 IsValid() 这样的方法并在单击保存按钮时调用它,它也会验证整个表单并告诉我它是否有效,但不会显示文本框周围的红色边框(因为 Validation. HasError 属性未更新),这是我需要的,因为我需要以多个控件的形式通知用户导致问题的确切控件。

您可以从此链接 https://1drv.ms/u/s!AuCr-YEWkmWUiopdQ-eZ17IC7IAJnA获取有问题的示例项目

0 投票
1 回答
362 浏览

c# - INotifyDataErrorInfo ErrorsChanged 不适用于绑定到 ListCollectionView 的 UI 元素

此 XAML 元素绑定到我的视图模型中的 ListCollectionView:

ListCollectionView 是这样定义的:

并初始化:

在验证 AirframeCollectionView/TypeName 时,我使用的是 INotifyDataErrorInfo 接口,因此:

为了引发错误,我一直在这样做:

但是,这不会触发 UI 中的错误响应。我将属性名称从“AirframeCollectionView/TypeName”更改为“TypeName”,但这也不起作用。在调试器中,我确认validationErrors 加载了错误,并且ErrorsChanged 是使用提供的属性名称触发的。

请注意,当我在模型而不是 ViewModel 中实现 INotifyDataErrorInfo 时,这一切正常,但出于各种原因,我希望实现在 ViewModel 中。

问题

设置 DataErrorsChangedEventArgs 并触发 ErrorsChanged 时,我必须使用什么属性名称格式?或者我这里还有其他结构性问题吗?

0 投票
1 回答
3925 浏览

wpf - 如何添加验证以查看模型属性或如何实现 INotifyDataErrorInfo

我有一个 ObservableCollection 类型的数据集合(例如 myClassTypes 实例)。在一些用户操作之后,这个 myClassTypes 填充了 ViewModel 中的值。在视图中,有一个文本框,用户可以在其中输入文本。我需要根据 myClassTypes 值验证文本框数据。因此,如果 myClassTypes 包含用户在文本框中插入的文本,则通过验证,否则将失败。我的代码片段是:ViewModel:

仅供参考:MyClassTypesProperty 是一个依赖属性

我的 View.xaml 是:

我无法在 MyClassTypes 中获取 ViewModelClassTypes 填充值。谁能建议我做错了什么?

0 投票
1 回答
167 浏览

c# - 如何修复 Xamarin.Forms 条目附加属性“溢出”?

我正在尝试使用 INotifyDataErrorInfo 为 Xamarin.Forms(XF) 条目设置验证并附加属性 (AP)。该代码在仅使用一个条目时按预期工作。当我为第二个条目初始化 AP 时会出现问题。然后,如果在 Entry1 中发生错误,它会显示在 Entry2 中。

我在 WPF 中使用了 INotifyDataErrorInfo,它就像一个魅力。唯一的问题是我找不到任何关于如何为 WPF 实现“验证”附加属性的文档。我已经查看了有关验证的其他替代方案,但似乎不像使用 INotifyDataErrorInfo 和自定义模型包装器一样可靠。

绑定扩展(用于获取绑定)

附加属性

入口风格

视图中的条目

我期望发生的是,我应该能够为多个 Entry 控件激活此 ValidationBehavior,然后为每个控件显示错误。

我猜这与 AP 是静态类和属性的事实有关,但后来我有点迷失了,因为如果这是正确的,那么附加属性的意义何在..

有没有人对如何做到这一点有最微弱的想法?

0 投票
2 回答
303 浏览

c# - 用 INotifyDataErrorInfo 替换 IDataErrorInfo

我有一个类Person,有两个属性FirstNameLastName, 两个Constructors,一个ICommand和常用的东西和所需的INotifyPropertyChanged东西IDataErrorInfo

xaml我有两个TextBox绑定到FirstNamePerson LastName,两个Label用于验证错误消息,一个Button绑定到 ICommand,添加Person以下内容ListView

它有效,如果名字和姓氏无效,我会收到错误消息,并且只要名字和姓氏中的任何一个无效,按钮就会保持禁用状态。我只想用 替换IDataErrorInfo部分INotifyDataErrorInfo。我必须在Person课堂上进行哪些更改并xaml保持相同的功能?

0 投票
1 回答
132 浏览

wpf - 验证 ListBoxItem 而不是 ListBox INotifyDataErrorInfo

我在这里尝试 了解决方案:验证 ListBoxItem 而不是 ListBoxWPF ListBox ErrorTemplate 和 WPF INotifyDataErrorInfo highlight ListBoxItem

我有一个列表框

使用以下项目模板和 itemcontainerstyle

和以下验证(实现 INotifyDataErrorInfo)

无论我多么努力,我总是让整个列表框突出显示,并在错误时用红色边框包围(不是有错误的列表框项)我的代码有问题吗?

注意:我调试了代码以确保确实存在错误并且确实存在并且它显示为整个列表框周围的边框