我有WPF窗口,在其内部DataGrid中,Items Source在我的数据上下文中设置为BindingList集合。 DataGrid和绑定工作正常,项目显示并删除我更改模型的方式。还为模型中的BindingList集合的ListChanged事件挂钩了处理程序。然后我们可以将模型与已经存在的数据进行比较,同时用户在DataGrid中键入项目(如果模型更新,则启用保存按钮)。还具有DataGrid中项目的验证规则。例如,当用户为名称输入无效字符时,项目将获得红色标记。然后我们也只是禁用保存。
但现在我有了新的要求来检查DataGrid中是否有多个具有相同名称的项目,并在DataGrid中用红色标记它们 - 同时用户在项目中键入。
由于模型已经实现了IDataErrorInfo,我可以很容易地发现模型中的集合中确实存在重复项。但是,如何在DataGrid中仅标记具有重复名称的项目?据我所知,这是以组合(DataGrid)的第一个方式验证,然后根据该规则标记特定项目,但我完全被阻止,因为不知道如何在MVVM和WPF中正确实现它。 ..
答案 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;
}
}
}