WPF DataGrid验证重复项

时间:2015-07-24 14:57:23

标签: c# wpf validation mvvm datagrid

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

但现在我有了新的要求来检查DataGrid中是否有多个具有相同名称的项目,并在DataGrid中用红色标记它们 - 同时用户在项目中键入。

由于模型已经实现了IDataErrorInfo,我可以很容易地发现模型中的集合中确实存在重复项。但是,如何在DataGrid中仅标记具有重复名称的项目?据我所知,这是以组合(DataGrid)的第一个方式验证,然后根据该规则标记特定项目,但我完全被阻止,因为不知道如何在MVVM和WPF中正确实现它。 ..

1 个答案:

答案 0 :(得分:0)

我有一些类似的实现。未经测试的代码如下:

实施例

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;
     }
 }      
}