C# WPF DataGrid验证重复项
我有一个WPF窗口,在它的DataGrid中,Items Source在我的数据上下文中被设置为BindingList集合。DataGrid和绑定工作正常,项目显示并删除我如何更改模型。还为模型中BindingList集合的ListChanged事件连接了处理程序。然后,当用户在DataGrid中的项中键入数据时,我们可以将模型与已持久化的数据进行比较(如果模型已更新,则启用保存按钮)。还具有DataGrid中项目的验证规则。例如,当用户为名称输入无效字符时,项将被标记为红色。然后我们也只是禁用save 但现在我有了一个新的要求,即检查DataGrid中是否有多个名称相同的项,并在DataGrid中用红色标记它们——同时用户在项中键入C# WPF DataGrid验证重复项,c#,wpf,validation,mvvm,datagrid,C#,Wpf,Validation,Mvvm,Datagrid,我有一个WPF窗口,在它的DataGrid中,Items Source在我的数据上下文中被设置为BindingList集合。DataGrid和绑定工作正常,项目显示并删除我如何更改模型。还为模型中BindingList集合的ListChanged事件连接了处理程序。然后,当用户在DataGrid中的项中键入数据时,我们可以将模型与已持久化的数据进行比较(如果模型已更新,则启用保存按钮)。还具有DataGrid中项目的验证规则。例如,当用户为名称输入无效字符时,项将被标记为红色。然后我们也只是禁用
由于模型已经实现了IDataErrorInfo,我很容易发现模型中的集合中确实存在重复项。但我如何在DataGrid中仅标记具有重复名称的项目?据我所知,这在某种程度上是先验证组(DataGrid),然后根据该规则标记特定项,但我完全被阻止了,因为我不知道如何在MVVM和WPF中正确实现它…我有一些类似的实现。未经测试的代码 范例
pubilic class ViewModel
{
ObservableCollection<ViewModelDetail> Details { get; set; }
}
public class ViewModelDetail
{
private readonly ViewModel parent;
public class ViewModelDetail(ViewModel parent)
{
this.parent = parent;
}
private string name;
public string Name
{
get{ return this.name; }
set
{
if(this.parent.Details.Where(d => d.Name == value).Count() > 0)
SetError("Name", "Duplicate name");
else
this.name = value;
}
}
}
公共类视图模型
{
ObservableCollection详细信息{get;set;}
}
公共类ViewModelDetail
{
私有只读视图模型父级;
公共类ViewModelDetail(ViewModel父级)
{
this.parent=parent;
}
私有字符串名称;
公共字符串名
{
获取{返回this.name;}
设置
{
if(this.parent.Details.Where(d=>d.Name==value).Count()>0)
设置错误(“名称”、“重复名称”);
其他的
this.name=值;
}
}
}