当过滤具有一些空单元格的列时,ICollectionView FIlter会抛出NullReferenceException

时间:2015-05-19 08:09:51

标签: c# wpf mvvm

正如标题所示,我在使用带有ICollectionView的过滤器时遇到了问题。

基本上我有一个TextBox。当我在这个TextBox中输入一个字母时,会触发过滤器(感谢INotifyPropertyChanged)。因此,ICollectionView显示的内容将缩小以匹配键入的内容。或者更确切地说,它将显示在数据绑定中的内容缩小为ICollectionVIew。即ListBox,DataGrid ......

下面是使用过滤器绑定的TextBox的属性。

    // This is a property bound to a TextBox meant to Search the First Name of a person
    private string _searchFirstName
    public string SearchFirstName
    {
        get
        {
            return _searchFirstName;
        }
        set
        {
            _searchFirstName= value;
            OnPropertyChanged("SearchFirstName");
            // After any changes have been made, the filter is fired.
            PrincipalView.Filter = PrincipalFilter;
        }
    }

然后是由财产解雇的过滤器。

    private bool PrincipalFilter(object item)
    {
        // principal is the name of the table back in my relational database (MySQL)
        principal principal = item as principal;
        return principal.FirstName.Contains(SearchFirstName)
    }

你看上面的作品很好,原因很简单,每个人都有一个名字。因此,对于在表主体中输入的每个记录/行,FirstName列中永远不会有空单元格或空单元格。但是,对于第二个名称或WorkPhone的列,不能说同样的内容。

所以当我添加一个“ SearchSecondName ”属性时,表中并不是每个人都有第二个名称(即实际对应表列中的某些单元格为空),每次在实际过滤器中抛出NullReferenceException。所以我不能根据这些字段过滤掉ICollectionView,即使它是必要的。

我真的希望能够使用这些列过滤信息,但似乎无法找到解决方法。任何有关解决这个问题的帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

在回复您的评论时,您只需要在尝试调用方法之前检查SecondName

return principal.SecondName != null && principal.SecondName.Contains(SearchSecondName);

我现在将此问题视为副本。