gpt4 book ai didi

c# - WPF Datagrid 新行验证

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

我使用 DataGrid 制作了一个简单的 WPF 应用程序,其中使用 Employee 对象绑定(bind)到 List:

public class Employee
{
private string _name;

public int Id { get; set; }


public string Name
{
get { return _name; }
set
{
if (String.IsNullOrEmpty(value))
throw new ApplicationException("Name cannot be empty. Please specify the name.");
_name = value;
}
}

如您所见,我想防止在没有设置 Name 属性的情况下创建员工。
所以,我制定了一个验证规则:
public class StringValidationRule : ValidationRule
{
public override ValidationResult Validate(object value, CultureInfo cultureInfo)
{
string str = value as string;
if (String.IsNullOrEmpty(str))
return new ValidationResult(false, "This field cannot be empty");
else
return new ValidationResult(true, null);
}
}

名称字段的 XAML 如下所示:
<DataGridTextColumn Header="Name" 
ElementStyle="{StaticResource datagridElStyle}" >
<DataGridTextColumn.Binding>
<Binding Path="Name" Mode="TwoWay" NotifyOnValidationError="True" ValidatesOnExceptions="True" UpdateSourceTrigger="PropertyChanged" >
<Binding.ValidationRules>
<emp:StringValidationRule/>
</Binding.ValidationRules>
</Binding>
</DataGridTextColumn.Binding>
</DataGridTextColumn>

如果我尝试在 DataGrid 中编辑现有员工行的名称并将其设置为空字符串,datagrid 会标记错误的字段并且不允许保存行。这是正确的行为。

但是,如果我创建一个新行并在键盘上按 Enter 键,则会创建这个新行,并将 _name 设置为 NULL,并且验证不起作用。我猜这是因为 DataGrid 为新行对象调用默认构造函数并将 _name 字段设置为 NULL。

验证新行的正确方法是什么?

最佳答案

你可以实现 IDataError在您的 Employee 上目的。这个here上有一个很好的页面.

关于c# - WPF Datagrid 新行验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6598241/

26 4 0
文章推荐: django - 如何在 Django 中为 404 错误设置模板
文章推荐: 当选择更多选项时,jQuery 更改事件不会在 IE8 中的多个