C# WPF DataGrid验证重复项

C# WPF DataGrid验证重复项,c#,wpf,validation,mvvm,datagrid,C#,Wpf,Validation,Mvvm,Datagrid,我有一个WPF窗口,在它的DataGrid中,Items Source在我的数据上下文中被设置为BindingList集合。DataGrid和绑定工作正常,项目显示并删除我如何更改模型。还为模型中BindingList集合的ListChanged事件连接了处理程序。然后,当用户在DataGrid中的项中键入数据时,我们可以将模型与已持久化的数据进行比较(如果模型已更新,则启用保存按钮)。还具有DataGrid中项目的验证规则。例如,当用户为名称输入无效字符时,项将被标记为红色。然后我们也只是禁用

我有一个WPF窗口,在它的DataGrid中,Items Source在我的数据上下文中被设置为BindingList集合。DataGrid和绑定工作正常,项目显示并删除我如何更改模型。还为模型中BindingList集合的ListChanged事件连接了处理程序。然后,当用户在DataGrid中的项中键入数据时,我们可以将模型与已持久化的数据进行比较(如果模型已更新,则启用保存按钮)。还具有DataGrid中项目的验证规则。例如,当用户为名称输入无效字符时,项将被标记为红色。然后我们也只是禁用save

但现在我有了一个新的要求,即检查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=值; } } }