如何在集合项中强制唯一性

时间:2010-05-12 19:09:16

标签: wpf wpf-controls binding wpfdatagrid

我在项目中有一个场景,我们需要从数据库中获取所有活动的书记录并保存在observablecollection中。这个observale Collection绑定到WPF应用程序中的网格控件,用户可以在其中添加删除书籍。我们需要在收集中保留所有添加,删除和修改的记录,直到用户点击保存到数据库。 我们的约束是书名,IBN书的数量必须是唯一的。如果用户添加具有已存在于集合中的重复书名的新书,则我们需要使该对象无效,以便在所有集合对象无效之前不允许用户保存在数据库中。 我知道它可以通过不同的方式实现,我想知道这样做的最佳实践。任何有IDataErrorInfo或企业验证库的解决方案都很受欢迎。

1 个答案:

答案 0 :(得分:0)

你可以很好地使用像这样的IDataErrorInfo

public class Book : IDataErrorInfo
{
    public string BookName { get; set; }
    public string IBN { get; set; }

    public string Error
    {
        get { throw new NotImplementedException(); }
    }

    public string this[string columnName]
    {
        get 
        {
            string result = null;

            switch(columnName)       
            {         
                case "BookName":   
                    result = IsDuplicate(BookName) ? "Already Present" : null;
                    break;                  
                case "IBN":            
                    result = IsDuplicate(IBN) ? "Already Present" : null;
                    break;
                default:            
                    break;      
            }
            return result;
        }
    }
}