问题标签 [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.
wpf - POCO、DTO 和 IDataErrorInfo
我今天早上醒来发现一个问题!
在我的所有组件中,我都有一组业务规则,用于在将任何更改提交到存储库之前验证 DTO。
我一直在尝试找出将验证错误返回到 UI 的最佳方法,但我遇到了 IDataErrorInfo 接口。极好的!
但是,此接口的实现会将我的 DTO 转换为 POCO,并使其在内存使用方面成为更大的对象。目前,所有用户控件都绑定到当前的 DTO 对象。
将我的 DTO 转换为 POCO 会对性能产生影响吗?或者有没有更好的方法将验证消息返回到 UI?
c# - 在相关但非互斥的复选框上使用 IDataErrorInfo
我在表单上有一系列复选框。必须检查一个或多个,如果没有,我想在它们上显示一个错误图标,直到其中一个被选中。
我的 IDataErrorInfo 实现如下所示:
现在,如果没有选中绑定到 options1-3 的复选框,则每个复选框上都会有一个错误图标,这很好,但是当其中一个被选中时,只有一个复选框的错误图标会被删除(与所有这些相反)。
更改其中任何一个时,将表单重新播放验证1-3重新播放验证的理想方式是什么?
如果有帮助(尽管我认为它与普通的 winforms 控件应该没有太大区别),我使用的是 DevExpress UI 控件,所以复选框是 CheckBoxEdit 的,ErrorProvider 是 DxErrorProvider。
编辑:已解决
当一个选项被更改时,我最终手动通知其他选项的属性更改。
c# - c# - 方法声明中的方括号如何适合 c#?
方法声明中的方括号如何与 c# 匹配?这是我在阅读 WPF 验证时看到的,可以将 IDataErrorInfo 与以下示例一起使用。
公共字符串 this[字符串属性名]
我注意到 MSDN 说“方括号 ([]) 用于数组、索引器和属性。它们也可以与指针一起使用。” 那么上面的用法是指针吗?
c# - 使用 ViewModel 实体上的 DataAnnotation 进行 Prism IDataErrorInfo 验证
我正在使用 Prism MVVM 框架在 WPF 中实现数据验证。我在绑定到表示层的 ViewModel 中使用干净的数据实体。
我在基本 ViewModel 类中实现了 IDataErrorInfo 的通用实现,该类针对我的实体(在本例中为用户)上的 DataAnnotation 属性运行验证。
问题是,当绑定到实体时,WPF 框架在实体上查找 IDataErrorInfo 而不是我希望此逻辑存在的 ViewModel。如果我用 ViewModel 中的属性包装我的实体,那么一切正常,但我不希望损害 ViewModel 中实体的使用。
有没有办法告诉 WPF 在 ViewModel 中查找 IDataErrorInfo 而不是正在绑定的子对象?
谢谢,迈克
wpf - LINQ to SQL Classes with INotifyPropertyChanged and IDataErrorInfo for WPF bindings
I use the LINQ to SQL Classes to access to my database. Now I want to use the LINQ to SQL Classes for WPF DataBindings and validation. How do I implement these two interfaces to my projects Model? Is it possible implement INotifyProperty automatically?
c# - 将 ValidatesOnExceptions 输入错误通知 ViewModel
在我的应用程序中,我有绑定到 TextBoxes 的数字(双精度或整数)ViewModel 属性。ViewModel 实现 IDataErrorInfo 以检查输入的值是否在“业务逻辑”的可接受范围内(例如,高度不能是负值)。我每页有多个文本框,并且有一个按钮(在向导中考虑“下一步”),该按钮已启用属性绑定到 ViewModel 布尔值,该布尔值指定整个页面上是否有任何错误。根据我编写的 IDataErrorInfo 规则,按钮的启用/禁用状态已正确更新为有效/无效值。
但是,由于输入值未转换(即“12bd39”不是有效的双精度),因此无法让我的视图模型知道何时引发异常,因此在转换异常的情况下我的“下一步”按钮尽管输入错误,仍将保持启用状态。然而,由于我的绑定,GUI 正确地反映了装饰器的错误:
如何让视图知道发生了“ValidatesOnExceptions”样式错误。Josh Smith 的做法似乎依赖于将每个 ViewModel 属性设为字符串并滚动您自己的异常检查,这似乎需要做很多额外的工作。我还开始研究 Karl Shifflett 的实现here,但在将此代码放入视图的代码隐藏文件时,我似乎无法捕获我期望的路由事件:
Silverlight 似乎也有一个您可以订阅的事件,但我在 WPF (3.5) 中找不到确切的等价物。任何帮助表示赞赏!
wpf - WPF 错误模板未显示
我没有收到任何绑定错误,并且此代码在另一个地方工作。我还没有发现我现在所做的与它工作的代码有什么不同,而且代码不多。
在UserControl.Resource 中:
在 Xaml 下面也是:
Model.Tags
我的 ViewModel 中的按钮 SAVE 仅在属性超过用户输入的 10 个字符时才被激活。当我输入 10,11 然后返回 8 个字符时,按钮激活/禁用工作正常。所有属性更改都被触发。
型号:
视图模型:
什么不起作用是带有红色椭圆的 ErrorTemplate 根本没有显示?
更新:下面的代码完全适用于 TEST 项目。但是在我的生产项目中它没有找到资源???为什么会这样?
c# - 超越数据验证样式:基于其他属性的样式
我希望这个问题没有在其他地方被问到,但是我很难找到正确的搜索词来找到这个问题的任何已经存在的答案。
我正在用 C# WPF (MVVM) 实现一个程序,其中有许多采访风格的屏幕,用户可以在其中有序地输入科学数据。我们希望Textbox
' 和DataGrid
' 根据该控件中的数据是由用户输入、由程序输入为默认值还是来自用户导入的另一个文件。最重要的是,我们希望 UI 响应来自 ViewModel 中实现的 IDataErrorInfo 的验证检查。
因此,如果 TextBox 中显示的数据是模板值,则它可能是蓝色的;如果是程序默认值,则显示为绿色;如果用户输入,则显示为黑色;如果 IDataErrorInfo 表明它是错误数据,则显示为红色。
我实现这一点的最初答案是创建一个自定义类:
然后我TextBox.Text
在 View 中拥有我的所有属性,如下所示:
并使用响应 someAdornerString 的属性的 DataTriggers 应用样式以创建适当的颜色。
但是,ViewModel 上的 IDataErrorInfo 不再验证 TextBox。为什么会这样,有没有更好的方法来解决我的问题?我无法在 AdornerString 类中进行验证。
一种可能的解决方法,尽管不可取:
我能想到的唯一其他解决方案是在 ViewModel 中为用户输入的每个字段设置两个属性——一个用于数据本身,另一个是与上面相同的自定义类减去字符串。但是,这意味着我无法概括用于文本框的样式。每个 TextBox 都必须有一个像这样的自定义样式:
因为每个 UI 字段都有一个与之关联的特定自定义类。
我宁愿不以这种方式实现,因为我可能有 100 多页输入屏幕,每个屏幕都有 1-12TextBox
个,忽略混合中抛出的 DataGrids(具有并行数据数组及其关联的自定义类) .
有任何想法吗?我已经阅读了自定义验证,但我还没有看到这在这种情况下会有什么帮助。
c# - 使用 IDataErrorInfo 或任何类似的模式来传播错误消息
我为这个问题道歉,因为它相当模糊,并且集成了几个问题,但由于它们密切相关,我不想将它们分成几个提交。
我目前正在考虑如何测试应用程序中的配置错误。有不同的选项可用,之前使用过的一个是 IDataErrorInfo 接口。我对这个实现的外观不是很满意,不是因为它不起作用,而是因为我不完全同意实际的实现。我一直在搜索这个站点(所有 52 个相关问题)和其他站点,以了解为什么 Microsoft 决定将关键字“this”与索引一起使用是个好主意。它通常用于对集合中的项目进行索引,即使是强硬的人也可以将我实现的类视为错误的集合,我并不真正同意“this[]”关键字应该隐式地用于测试它们。(边注:这是否意味着自定义集合类不能有自己的配置错误?)为什么这不是像“TestErrorState(string propertyname)”这样的方法调用,甚至不是索引属性?以及“字符串错误{get;”的频率是多少?}”实际使用过吗?对我来说,它看起来像是一种“黑客”,而且不太容易使用。
由于此实现,我确实遇到的一个实际问题是我有与其他对象相关的对象,我希望错误状态能够传播。这很丑陋,因为用户界面中显示的类应该处于“错误状态”,因为相关对象不一定向用户显示(除非用户单击界面上的选项并将“向下移动” ”对象层次结构中的一级)。这意味着我需要用我自己的方法来扩展错误模式的测试来传播这些错误,然后我开始质疑我是否应该只实现一些完全不同的东西而不是使用 IDataErrorInfo 接口。
请让我知道在哪里可以找到一些关于 IDataErrorInfo 为何如此的好信息。如果你能给我一个很好的想法,让我知道如何让错误模式通过对象层次结构传播,这将是非常棒的!当我说传播时,我并不是说作为一个例外,因为这感觉像是一个事件,只是当一个对象被询问配置错误时,它还应该询问它的所有孩子是否有错误,然后也传递孩子的错误消息。
wpf - IDataErrorInfo 和异常之间的 WPF 验证顺序
我有一个同时具有ValidatesOnDataErrors = true
和的控件ValidatesOnExceptions = true
。我也有一些东西在看Validation.Errors
这个绑定的集合。
用户输入的值可转换(无例外)但无效(IDataErrorInfo 报告错误消息)。错误出现在错误集合中,并按预期显示。
然后用户输入一个不可转换的值(抛出异常)。IDataErrorInfo 仍然报告与以前相同的错误(因为模型值没有改变)。
在后一种情况下,我更愿意在列表中单独查看异常错误,但会接受同时出现异常和数据错误(以任何顺序)。
但是,实际发生的情况是只有数据错误最终出现在列表中,这最终会给用户一个误导性的错误消息(因为这是他们输入的前一个值的错误,而不是当前值)。
在内部跟踪它,似乎当第二个用户操作发生时,异常错误被添加到列表中,然后再次删除并替换为数据错误。任何时候这两个错误都不会同时出现在列表中。
任何想法如何从中获得所需的行为?
(后退一步:我想要实现的是结合 IDataErrorInfo 验证 [因为它更方便于域级测试],但仍然注意 UI 异常 [否则它会忽略用户输入某些内容时的情况完全愚蠢]。我不想走极端,让每个 VM 属性都成为字符串或其他类似的废话。)