正如标题所示,我在使用带有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,即使它是必要的。
我真的希望能够使用这些列过滤信息,但似乎无法找到解决方法。任何有关解决这个问题的帮助将不胜感激。
答案 0 :(得分:0)
在回复您的评论时,您只需要在尝试调用方法之前检查SecondName
:
return principal.SecondName != null && principal.SecondName.Contains(SearchSecondName);
我现在将此问题视为副本。