问题标签 [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 回答
50 浏览

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 具有相同的效果。

0 投票
1 回答
397 浏览

c# - 将 INotifyDataErrorInfo 与属性一起使用

我正在视图模型上设置 INotifyDataErrorInfo,以处理属性验证。

我让它在 UI 中运行良好,文本框有一个漂亮的红色边框,鼠标悬停事件说明出了什么问题。

但我无法弄清楚如何在 ViewModel 中计算出视图模型是否有效。我猜我必须设置 HasErrors。在我看到的示例中,它们有一个变量

但是然后什么都不做设置它。

如果视图模型有效,我想检查 Save() 方法。

0 投票
1 回答
254 浏览

c# - INotifyDataErrorInfo - 模型或 ViewModel

我正在使用带有 MVVM 的 WPF 制作日历,我有一个日历条目模型,它也有一个视图模型。我看到了 INotifyDataErrorInfo 的示例,在某些示例中它是在模型中实现的,而在其他示例中它是在视图模型中。INotifyDataErrorInfo 属于模型还是视图模型?

0 投票
1 回答
56 浏览

wpf - 定义窗口的模板样式时,INotifyDataErrorInfo 不会触发文本框样式

如果我从窗口中删除样式属性,那么我的文本框周围会出现红色边框。但是,如果我在窗口上定义了样式,那么它不会显示吗?为什么?

我发现“问题”是因为Template属性是在窗口样式中定义的。当我删除该部分时,验证样式会像应用程序的其他部分一样显示。

这是我的窗口风格:

这是我的登录窗口:

0 投票
1 回答
521 浏览

c# - WPF 整数验证

我正在使用INotifyDataErrorInfo,这个实现:https ://kmatyaszek.github.io/wpf-validation/2019/03/13/wpf-validation-using-inotifydataerrorinfo.html

万一链接失效的代码:

它工作得很好,但现在我想验证整数值,而不是字符串。基本上用户应该不能输入除 之外的任何内容int,否则应用程序将崩溃。但我不知道我ValidateIntegerValue()可以写什么方法,因为我无法检查 if intis int,因为在后端它总是整数。

0 投票
1 回答
64 浏览

c# - 自定义文本框控件中的 ValidationError 模板

我创建了一个自定义控件,扩展了文本框控件,只允许输入字母数字字符。

之后,我使用 INotifyDataErrorInfo 实现了错误处理。问题是当显示错误时,在正常的texbox中它显示正确,但在我的自定义文本框中它们没有显示,只有边框变成红色。

在此处输入图像描述

自定义文本框有点小,它就像一个双边框。

这是我的代码:

我是否需要从文本框继承模板或类似的东西?

谢谢!

0 投票
0 回答
35 浏览

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 内部生成的相同行为显示在屏幕上?

0 投票
1 回答
208 浏览

c# - 使用 INotifyDataErrorInfo 的跨属性验证不起作用

我正在尝试在我的 MVVM 项目中实现验证,并在 Model 上完成验证。下面是一个最小的例子:

看法:

视图模型:

模型:

从示例中,Number属性应该在任何时候被验证Limit,并且验证错误Number应该显示在视图上。但是,可以观察到验证方法正在执行,但Number视图上的字段没有显示验证错误。

这篇文章来看,似乎INotifyDataErrorInfo应该支持这种跨属性验证。

0 投票
1 回答
96 浏览

wpf - 使用组合从 XAML 错误模板访问 INotifyDataErrorInfo 验证错误

我的视图模型基类最初实现了 INotifyDataErrorInfo,并且一切都完美无缺,但我现在正在探索如何使用组合而不是继承来进行验证,以便我的视图模型基类除了 INotifyPropertyChanged 之外不需要做任何事情。我也在寻找一个可重用的解决方案,这样我就不必在我的所有视图模型上实现 INotifyDataErrorInfo。

我创建了 INotifyDataErrorInfo 的具体实现,可以将其包含在需要验证的视图模型中(仅包含相关代码):

当 MyViewModel 出现验证错误时,它会通过 NotifyDataErrorInfo 对象的实例获取/设置它们。(在我的原始版本中,ViewModel 实现了 INotifyDataErrorInfo。当我探索通过组合实现相同结果时,情况已不再如此。)

这是一个文本框,它在 MaxDaysText 属性设置器上报告验证错误,并设置验证错误模板。

我现在需要更新我的验证错误模板以访问 NotifyDataErrorInfo 属性中的错误,但我不确定如何执行此操作。

我尝试更改所有绑定以查找 NotifyDataErrorInfo,但没有运气。我需要对模板进行哪些更改才能访问 MyViewModel 的 NotifyDataErrorInfo 属性上的验证错误?

编辑: 似乎在组合方法中,ErrorsChanged 始终为空,并且永远不会通知视图。我猜当视图模型本身实现 INotifyDataErrorInfo 时,框架使用 ErrorsChangedEventManager 分配委托。但现在我把它排除在外了。因此,组合似乎不适用于这种方法。这个评价正确吗?

0 投票
1 回答
21 浏览

wpf - 使用 INotifyDataErrorInfo 添加错误信息时下移项目

例如,我有一个组合框,如果没有选择它,那么我会在它下面显示一条错误消息。显示消息时,它显示在组合框下方的控件顶部。显示错误消息时,有没有办法将组合框下的控件向下移动?