问题标签 [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.
wpf - Validation.Error 在 ContentPresenter 更改内容时删除所有内容
这是一个 WPF,.Net 4.8 应用程序。我有一个类似于 tabcontrol 的控件,其中有一个 ContentPresenter:
如果您单击列表中的某个项目,内容将切换到另一个项目(SelectedTab),该项目位于依赖项属性中,如下所示:
MyTab 就是这样一个类:
您使用如下控件:
故障与验证有关。当 SelectedTab 更改为 Tabs 集合中的其他项目之一时,Validation.Error 会触发(x 次),删除我们要离开的选项卡上的所有验证错误(使用 IDataErrorInfo)。这很糟糕,因为我正在使用 Validation.Error 事件来计算有错误的 UI 元素的数量并显示它,以便用户知道哪些选项卡包含验证错误。
一旦我重新选择原始选项卡(并且 ContentPresenter 显示它),Validation.Error 将再次触发(x 次),因此我可以再次获取错误计数。但是当然,另一个选项卡会丢失所有错误(事件触发)!
此外,在实际选择它们之前,没有其他选项卡永远不会获得错误计数(并且 ContentPresenter 会显示它们)。
所以这就像验证系统无法识别绑定错误的存在,因为那个 UI 在那一刻没有显示,即使 UI 仍然存在。未选择的选项卡的视觉状态永远不会丢失,因此它们不会被删除和重新创建或类似的东西(它们存储在上面显示的选项卡依赖属性中)。
有没有办法在我的 ContentPresenter 不显示未选择的选项卡时将它们保留在可视树中,并最初在可视树中创建它们?我希望它们都立即可用,以便所有选项卡都可以显示它们的错误计数,并且无论选择哪个选项卡都可以实时更新。
我尝试了一个名为 Gu.Wpf.ValidationScope 的第三方验证库,但它遇到了同样的问题。所以现在我手动使用 Validation.Errors 具有相同的效果。
c# - 将 INotifyDataErrorInfo 与属性一起使用
我正在视图模型上设置 INotifyDataErrorInfo,以处理属性验证。
我让它在 UI 中运行良好,文本框有一个漂亮的红色边框,鼠标悬停事件说明出了什么问题。
但我无法弄清楚如何在 ViewModel 中计算出视图模型是否有效。我猜我必须设置 HasErrors。在我看到的示例中,它们有一个变量
但是然后什么都不做设置它。
如果视图模型有效,我想检查 Save() 方法。
c# - INotifyDataErrorInfo - 模型或 ViewModel
我正在使用带有 MVVM 的 WPF 制作日历,我有一个日历条目模型,它也有一个视图模型。我看到了 INotifyDataErrorInfo 的示例,在某些示例中它是在模型中实现的,而在其他示例中它是在视图模型中。INotifyDataErrorInfo 属于模型还是视图模型?
wpf - 定义窗口的模板样式时,INotifyDataErrorInfo 不会触发文本框样式
如果我从窗口中删除样式属性,那么我的文本框周围会出现红色边框。但是,如果我在窗口上定义了样式,那么它不会显示吗?为什么?
我发现“问题”是因为Template
属性是在窗口样式中定义的。当我删除该部分时,验证样式会像应用程序的其他部分一样显示。
这是我的窗口风格:
这是我的登录窗口:
c# - WPF 整数验证
我正在使用INotifyDataErrorInfo
,这个实现:https ://kmatyaszek.github.io/wpf-validation/2019/03/13/wpf-validation-using-inotifydataerrorinfo.html
万一链接失效的代码:
它工作得很好,但现在我想验证整数值,而不是字符串。基本上用户应该不能输入除 之外的任何内容int
,否则应用程序将崩溃。但我不知道我ValidateIntegerValue()
可以写什么方法,因为我无法检查 if int
is int
,因为在后端它总是整数。
c# - 使用 INotifyDataErrorInfo 时验证插入的错误数据类型
我有一个实现 INotifyDataErrorInfo 的 ViewModel,以及一个绑定到该 ViewModel 的 View。
ViewModel 包含一个 Double 类型的属性,在 View 中包含一个 TextBox,其 Text 属性绑定到该 Double 属性。
在 viewModel 的索引器中(来自 INotifyDataErrorInfo),我可以验证插入的值,例如检查它是否不超过某个边界。这样的错误消息然后我可以通过<ItemsControl ItemsSource="{Binding Path=Errors}" ItemTemplate="{StaticResource ResourceKey=WrapTemplate}" />
但是,当将无效字符插入文本框时,索引器(或整个 INotifyDataErrorInfo 实现)不会获得该值,因此他无法生成适合该错误插入的错误消息。当插入无效字符时,如何实现来自索引器的错误消息可以以与 .NET 内部生成的相同行为显示在屏幕上?
c# - 使用 INotifyDataErrorInfo 的跨属性验证不起作用
我正在尝试在我的 MVVM 项目中实现验证,并在 Model 上完成验证。下面是一个最小的例子:
看法:
视图模型:
模型:
从示例中,Number
属性应该在任何时候被验证Limit
,并且验证错误Number
应该显示在视图上。但是,可以观察到验证方法正在执行,但Number
视图上的字段没有显示验证错误。
从这篇文章来看,似乎INotifyDataErrorInfo
应该支持这种跨属性验证。
wpf - 使用组合从 XAML 错误模板访问 INotifyDataErrorInfo 验证错误
我的视图模型基类最初实现了 INotifyDataErrorInfo,并且一切都完美无缺,但我现在正在探索如何使用组合而不是继承来进行验证,以便我的视图模型基类除了 INotifyPropertyChanged 之外不需要做任何事情。我也在寻找一个可重用的解决方案,这样我就不必在我的所有视图模型上实现 INotifyDataErrorInfo。
我创建了 INotifyDataErrorInfo 的具体实现,可以将其包含在需要验证的视图模型中(仅包含相关代码):
当 MyViewModel 出现验证错误时,它会通过 NotifyDataErrorInfo 对象的实例获取/设置它们。(在我的原始版本中,ViewModel 实现了 INotifyDataErrorInfo。当我探索通过组合实现相同结果时,情况已不再如此。)
这是一个文本框,它在 MaxDaysText 属性设置器上报告验证错误,并设置验证错误模板。
我现在需要更新我的验证错误模板以访问 NotifyDataErrorInfo 属性中的错误,但我不确定如何执行此操作。
我尝试更改所有绑定以查找 NotifyDataErrorInfo,但没有运气。我需要对模板进行哪些更改才能访问 MyViewModel 的 NotifyDataErrorInfo 属性上的验证错误?
编辑: 似乎在组合方法中,ErrorsChanged 始终为空,并且永远不会通知视图。我猜当视图模型本身实现 INotifyDataErrorInfo 时,框架使用 ErrorsChangedEventManager 分配委托。但现在我把它排除在外了。因此,组合似乎不适用于这种方法。这个评价正确吗?
wpf - 使用 INotifyDataErrorInfo 添加错误信息时下移项目
例如,我有一个组合框,如果没有选择它,那么我会在它下面显示一条错误消息。显示消息时,它显示在组合框下方的控件顶部。显示错误消息时,有没有办法将组合框下的控件向下移动?