gpt4 book ai didi

WPF 验证错误

转载 作者:行者123 更新时间:2023-12-05 00:31:12 27 4
gpt4 key购买 nike

在我目前的项目中,我必须处理 WPF 表单中的数据验证。我的表单位于 ResourceDictionnary 的 DataTemplate 中。我可以通过两个按钮来保存和加载表单中的数据,这两个按钮可以序列化和反序列化数据(通过两个 DelegateCommand )。

如果我的表单的一个字段为空或无效,则保存按钮将被禁用。由于 UpdateSourceTrigger 属性,每次更改时都会检查一个字段。这就是为什么我需要在我的 C# 代码中知道某个字段是否无效以更新我的保存命令。

目前,我在我的 XAML 绑定(bind)中使用了 ExceptionValidationRule,我想知道这是否是一个好习惯。我无法实现 ValidationRule,因为我需要在我的 C# 代码中知道字段是否无效,以更新保存命令(启用或禁用保存按钮)。

<TextBox>
<Binding Path="Contact.FirstName" UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<ExceptionValidationRule/>
</Binding.ValidationRules>
</Binding>
</TextBox>

在这个 blog ,我们可以阅读:

Raising exceptions in the Setters is not a very good approach since those properties are also set by code and sometimes it is ok to temporarily leave them with error values.



我已经读过这篇 post但我不能使用它,我的 TextBox 在 DataTemplate 中,我不能在我的 C# 代码中使用它们。

所以,我想知道我是否应该更改我的数据验证并且不要使用 ExceptionValidationRule。

最佳答案

谢谢 blindmeis ,你的想法很好。
IDataErrorInfo 似乎比 ExceptionValidationException 更好,并且可以正常工作。

这是一个与我的项目匹配的示例:
IDataErrorInfo sample

它不使用 DelegateCommand 但很简单,可以修改。您的模型必须实现 IDataErrorInfo :

public class Contact : IDataErrorInfo
{

public string Error
{
get { throw new NotImplementedException(); }
}

public string Name { get; set; }

public string this[string property]
{
get
{
string result = null;
if (property== "Name")
{
if (string.IsNullOrEmpty(Name) || Name.Length < 3)
result = "Please enter a Name";
}
return result;
}
}

}

在 XAML 代码中,不要忘记更改 Binding :
<TextBox>
<Binding Path="Contact.Name" UpdateSourceTrigger="PropertyChanged" ValidatesOnDataErrors="True" NotifyOnValidationError="True"/>
</TextBox>

关于WPF 验证错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15199567/

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