2015-05-19 2 views
0

Как видно из названия, у меня проблема с фильтром с ICollectionView.ICollectionView FIlter throws NullReferenceException при фильтрации столбцов с некоторыми пустыми ячейками

В основном у меня есть текстовое поле. Когда я ввожу письмо в этот TextBox, фильтр запускается (благодаря INotifyPropertyChanged). В результате содержимое, отображаемое ICollectionView, сужается, чтобы соответствовать тому, что было напечатано. Вернее, это сужает содержание, отображаемое в том, что привязано к ICollectionVIew. i.e 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

Возникает ли 'NullReferenceException' в вашем коде или из коллекции или кода WPF? –

+0

@AdamHouldsworth Это происходит на самом фильтре. В разделе: «return main.SecondName.Contains (SearchSecondName)» – Offer

ответ

0

В ответ на ваш комментарий, вам нужно просто обнулить проверить SecondName, прежде чем пытаться вызвать метод на нем:

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

Я теперь закрыть этот вопрос как дубликат.

+0

Спасибо за ответ. Это определенно работает. Однако есть проблема. Я намеревался использовать этот фильтр с «SecondName» в сочетании с «FirstName» и «Surname». Поэтому, если бы я был в поиске с использованием текстового поля FirstName, он бы только возвращал результаты, в которых также было заполнено «SecondName», и он игнорировал бы все остальные, которые пусты. Я надеялся, что решение может быть достигнуто там, где он все равно может вернуть пустые ячейки, не выбрасывая исключение. – Offer

+0

@offer Я просто возвращаю false на null, но вы всегда можете вернуть true. –

Смежные вопросы