gpt4 book ai didi

wpf - 如何让 WPF 在初始显示控件时不显示验证错误?

转载 作者:行者123 更新时间:2023-12-04 01:01:20 26 4
gpt4 key购买 nike

当我第一次向用户显示我的屏幕时,我宁愿在用户有机会填写任何表单字段之前不显示所有必填字段的验证消息等。我设置了UpdateSourceTrigger在我与 LostFocus 的绑定(bind)上,但第一次显示控件时仍会显示错误。有没有办法解决这个问题?

XAML:

<TextBox Text="{Binding Path=OpeningOdometer, ValidatesOnDataErrors=True, UpdateSourceTrigger=LostFocus}" />

View 模型:
[Required(ErrorMessage = "Please enter the opening odometer.")]
[Range(0, Double.MaxValue, ErrorMessage = "Opening Odometer must be a positive number")]
public string OpeningOdometer
{
get { return _openingOdometer; }
set
{
_openingOdometer = value;
NotifyOfPropertyChange(() => OpeningOdometer);
}
}

// Implementation of IDataErrorInfo
public string this[string columnName]
{
get
{
// This uses the System.ComponentModel.DataAnnotations placed on
// the OpeningOdometer property to produce an error string
// if the value of the property is in violation of any of the
// annotated rules.
return _valHelper.GetErrorsForProperty(columnName, this);
}
}

最佳答案

我没有将验证逻辑放在索引器中。这会将验证时间的控制权交给 View 。在您的方案中, View 在询问属性的错误信息时触发验证。我不知道会发生这种情况的每一种情况,我打赌你也不知道。

相反,我将属性的验证逻辑(更准确地说,是对验证函数的调用)放在它的 setter 中。我将错误消息存储在以属性名称为键的字典中,并让索引器查找该属性的错误消息。

然后,默认情况下,错误消息与属性的当前值是最新的。每当 View 更新属性并请求其新的错误信息时,它都会得到正确的答案。

但是您也可以对字典中的实际内容进行非常精细的控制。如果您希望某个属性在 UI 中显示为有效,只需在字典中清除其错误消息(并引发 PropertyChanged ,以便 UI 知道获取新的错误消息)。或者,您可以在构造 View 模型对象时设置属性的支持字段而不是属性本身,从而绕过验证。

关于wpf - 如何让 WPF 在初始显示控件时不显示验证错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2821998/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com