问题标签 [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.
silverlight - 引发 ErrorsChanged 事件时出现 INotifyDataErrorInfo ArgumentOutOfRangeException
这是一个奇怪的问题,此时我认为这可能与我的机器配置有关。
基本上我已经创建了一个非常标准的实现,INotifyDataErrorInfo
并且在某些情况下,当引发ErrorsChanged
事件时,我得到一个ArgumentOutOfRangeException
. 此异常不包含太多信息;它给了我关于非负索引和集合大小ArgumentOutOfRangeException crossed a native/managed boundary
的标准描述。ArgumentOutOfRangeException
为InnerException
空。堆栈跟踪如下:
我提到我的机器配置的原因是因为我已经尝试了一些发布到博客的解决方案(例如这里和这里)并且得到了同样的问题(即不是我的代码,INotifyDataErrorInfo 的另一个实现)并且在评论中没有提到任何其他人遇到我的问题。谷歌搜索出现了几个无济于事的随机点击。
所需状态如下:
- 我在控件中输入了一个值,以便触发验证错误。(这工作正常,错误文本按预期显示在 UI 中)。
- 然后我在控件中输入一个新值,以便验证成功并从错误集合中删除错误(HasErrors 返回 false)。
- 正在引发 ErrorsChanged 以反映此更改为成功验证且没有错误,并发生异常。
更新:如果我将焦点从显示验证错误的文本框移开,我也可以重现。
我有点想知道我是否错过了服务包/更新或其他东西,因为从我所看到的看来,框架代码中似乎存在一个非常基本的错误,同时其他人没有发生这种错误。
更新:我使用的是 Silverlight 4 的最终 RTM 版本。不是 RC 或 Beta。
更新:我得到与本白皮书提供的官方 MS 样本相同的结果。
更新:我现在已经在另一台机器上测试了我的代码和提到的示例,它工作正常。我仍然真的很想解决这个问题,因为它无法在我的常规机器上运行(到目前为止我还没有遇到任何问题),这有点令人不安。任何有关我如何追踪导致此问题的原因的建议将不胜感激。我已经在问题机器上重新安装了 Silverlight(运行时、SDK、工具包),但这并没有解决问题。
更新:这是通过使用 MS 符号服务器启用源服务器支持获得的发生异常的框架代码的调用堆栈:
更新:应用程序在没有附加调试器的情况下运行良好(在问题机器上),按预期工作并且没有调用未处理的异常脚本(这有点让我难过,它可能与 VS 相关吗?)。我在 google 上进行了快速搜索,看看是否可以找到任何 Silverlight 插件日志文件,这可能会在没有运气的情况下在这里有所启发,是否有这样的日志?
silverlight - Silverlight 中的 AutoCompleteBox 和 INotifyDataErrorInfo
有没有人成功应用 INotifyDataErrorInfo 接口并绑定到 AutoCompleteBox。我已经尝试过了,但我没有得到任何回应。该控件不响应其他控件,即带有红色边框和警告工具提示。它也不会使 Validation Summary 控件显示错误。
我已经成功地设置了标准的 TextBoxes 和 DatePickers,它们的行为完全符合互联网上人们提供的许多示例。
如果为了我的屏幕的一致性有一个答案会很好,也因为我想简单地绑定到 INotifyDataErrorInfo 附带的 HasErrors 属性以在准备保存时启用一个按钮,我不能这样做没有额外的代码来检查这些框是否正确。
目前,我通过使用 MVVMLight EventToCommand 绑定和注册 LostFocus 事件来区别对待这些。
然后在 ViewModel 中,我将 RoutedEventArgs.OriginalSource 转换为 TextBox 并像这样获取文本,防止用户离开框,除非它为空或匹配框列表中的项目:-
viewmodel - INotifyDataErrorInfo 可重用方法
我正在使用 MVVM-Light,对于每个视图模型,我必须创建 INotifyDataErrorInfo 的实现,在某些情况下,它使用相同的方法来验证相同的属性类型。在此示例中,我使用的是 DateTime:
我怎样才能使这段代码在其他视图模型中可重用,所以我不必一遍又一遍地实现相同的东西?
我创建了一个实现 INotifyDataErrorInfo 的类:
但是当我想在我的视图模型中使用它时它不起作用:
错误:
这是因为在我的主视图模型文件中,我有一个来自 MVVM-Light 的基类:
任何解决此问题的帮助都值得赞赏。
silverlight - 除了现有的 I*DataErrorInfo,还有哪些有效的替代 UI 验证错误可视化的方法?
在另一个问题中,我询问了如何在 Infragistics 中显示非编辑器控件的错误XamGrid
。还有一个问题解决了我正在尝试做的主要问题:显示错误以响应服务器端验证。
更笼统地说,有没有人想出一种模式,可以很好地可视化 Silverlight 中不使用IDataErrorInfo
或INotifyDataErrorInfo
机制的错误?回到我的 winform 时代,我想出了一些东西,因为验证似乎几乎是事后才想到的。现在虽然 MVVM 建议绑定视图(例如控件样式、背景、工具提示等)以查看模型“错误”属性,但实际上似乎上述两个接口占主导地位,并且是特定于技术的(是的,我知道模式和 WPF/Silverlight 重合)。
除了上述机制之外,在 MVVM 设计中是否还有其他可行的机制?还有哪些其他选择?不过,归根结底,我正在寻找适合 MVVM 的 Silverlight 解决方案,但这比INotifyDataErrorInfo
因为并非所有控件(尤其是第三方控件)似乎都支持这一点,或者如果他们支持,不完全按照预期的方式。
c# - WPF 4.5 DataGrids 的 INotifyDataErrorInfo 是否损坏
我在 WPF 4.5 项目中对 INotifyDataErrorInfo 做了一个简单的实现。这是 WPF 的一个新界面,但在 Silverlight 中已经有一段时间了。
我知道 NET4.5 仍然被认为是 alpha,但我正在尝试确定它是我的代码还是框架有问题。
该接口按预期工作,但在对象绑定到 DataGrid 时失败。
我收到的例外是:
System.NullReferenceException 未被用户代码处理
Message=Object 引用未设置为对象的实例。
Source=PresentationFramework StackTrace: 在 MS.Internal.Data.ClrBindingWorker.OnDataErrorsChanged(INotifyDataErrorInfo indei, String propName) 在 MS.Internal.Data.PropertyPathWorker.OnErrorsChanged(Object sender, DataErrorsChangedEventArgs e) 在 System.Windows.WeakEventManager.ListenerList`1。 DeliverEvent(Object sender, EventArgs e, Type managerType) at System.Windows.WeakEventManager.DeliverEvent(Object sender, EventArgs args) at System.ComponentModel.ErrorsChangedEventManager.OnErrorsChanged(Object sender, DataErrorsChangedEventArgs args) at INotifyDataErrorInfoTest.Person.NotifyErrorsChanged(String property ) 在 INotifyDataErrorInfoTest\Person.cs:第 109 行,位于 INotifyDataErrorInfoTest\Person 中的 INotifyDataErrorInfoTest.Person.AddErrorForProperty(String property, String error)。cs:INotifyDataErrorInfoTest.Person.Validate(String propertyName) 中 INotifyDataErrorInfoTest\Person.cs 的第 122 行:INotifyDataErrorInfoTest.Person.set_FirstName(String value) 中 INotifyDataErrorInfoTest\Person.cs 的第 150 行:第 18 行
代码位于http://dl.dropbox.com/u/14740106/INotifyDataErrorInfoTest.zip的下方或项目中
如果一致认为这是一个错误,那么我将发布到 MS Connect。
测试:有两个文本框绑定到 Person 对象的单个实例。将第一个文本框的值设置为 James,它将验证失败并显示红色框。如果您将网格中任何用户的名字设置为 James,则会引发异常。
PS:我知道这不是 MVVM,但这只是为了证明或反驳问题。
c# - 如何强制验证在 UserControl 上显示
我希望带有工具提示的库存/标准红色边框验证显示在我的 UserControl 周围。请参阅下面的代码。我有主页和用户控件。
UserControl 有文本框和按钮。UserControls 绑定到 Id 属性并在 TextBox 中显示此 Id。
主页有 UserControl 和 TextBox。它们绑定到 FirstValue 和 SecondValue。这两个属性都会引发错误。当我在文本框中输入/更改某些内容时 - 我看到了边框和摘要。当我在 UserControl 中更改文本时 - 我在摘要中看到错误但没有边框,当我点击错误时 - 它聚焦按钮,不会转到 TextBox。我该如何解决?我希望整个 UserControl 都在红色边框内。
主页 XAML:
主页 CS
用户控件 XAML:
用户控制 CS:
silverlight - 使用 INotifyDataErrorInfo 进行验证时将焦点返回到控件
我正在使用INotifyDataErrorInfo
Silverlight 中的实现进行简单验证。
提交时,我正在验证所有属性以显示所有错误。
当验证发生时,我需要将焦点返回到第一个出现验证错误的控件。
我们有办法做到这一点吗?有什么建议么?
c# - 使用验证规则产生错误时如何设置默认值?
我使用验证规则来显示自定义消息,并使用 INotifyDataError 来显示业务规则。
这是我的代码的一部分:
验证是针对 Nullable 数据类型的,我的意思是该值可以是 null 或整数,但不能是像“5b”这样的不正确输入。
问题是当它产生这个错误(noIllegalChars = true)时,我如何将属性设置为null?
编辑:我这样做的原因是,当用户将文本框留空(值将是“”)时,从技术上讲,对于为空值的属性,但它试图将“”设置为属性。
c# - INotifyDataErrorInfo 未在后面的代码中引发错误更改
我遇到了从代码隐藏执行验证的问题。我的数据显示在数据网格中。其中一列(类型)是下拉菜单,当下拉菜单更改时,它会触发 DropDownClosed 事件,该事件在后面的代码中处理。
我想要实现的是验证以下列的内容以匹配下拉列表中新选择的类型。如果不匹配,我希望在网格上显示验证错误。我使用 INotifyDataErrorInfo 接口实现了我的验证,它工作得非常好,除非我在后面的代码中使用它。当后面的代码调用验证时,数据网格的 ValidationSummary 永远不会更新。我在这里做错了什么???使用调试器时,我可以清楚地看到错误被添加到接口的错误字典中......
这是处理程序:
验证规则方法将根据规则类型值调用此方法
c# - 如何在 WPF 4.5 中实现 INotifyDataErrorInfo?
我意识到在 .NET Framework 4.5 中出现了这个接口
我首先在寻找如何在 Silverlight 中实现(我可以想象它以相同的方式实现),但我找不到这个新接口的紧凑演示。是否可以显示我如何使用它?
好想找个小demo看懂