Member 13412013 Ответов: 1

Фильтр combobox C# WPF


Привет, ребята, мне нужна помощь, я делаю проект, где у меня есть combobox и listView и combobox есть два варианта, доступных для фильтрации listview, но когда я выбираю опцию в combobox для фильтрации listview, если listView не имеет ничего загруженного, проект падает, говоря, что существует not nullReferencEexception, чтобы решить, что я хочу показать окно сообщения, чтобы предупредить список списка первым, я пытаюсь это сделать, но что-то не так, если вы можете помочь, вот код:

Что я уже пробовал:

private void comboBox_filtro_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (comboBox_filtro.SelectedItem == null)
            {
               MessageBox.Show("Consultar Primeiro a lista");
            }
            else
            {
                ICollectionView view = CollectionViewSource.GetDefaultView(listView.ItemsSource);
                view.SortDescriptions.Clear();

                if (view.CanFilter)
                {
                    view.Filter = new Predicate<object>(view.Filter = myTextFilter);
                }
            }

        }

1 Ответов

Рейтинг:
2

eddieangel

Если вы просто хотите остановить исключение NullReferenceException (а также для общей чистоты), попробуйте сделать это:

private void comboBox_filtro_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (comboBox_filtro.SelectedItem == null)
            {
                MessageBox.Show("Consultar Primeiro a lista");
            }
            else
            {
                ICollectionView view = CollectionViewSource.GetDefaultView(listView.ItemsSource);
                if (view != null)
                {
                    view.SortDescriptions.Clear();

                    if (view.CanFilter)
                    {
                        view.Filter = new Predicate<object>(view.Filter = myTextFilter);
                    }
                }
             }
        }


Однако это действительно не то, как вы хотите сделать WPF. Что вы действительно хотите сделать, так это привязать свой combobox SelectedItem к объекту в вашей модели представления, который реализует INotifyPropertyChanged, чтобы при изменении выбранных данных ваша модель представления могла фильтровать коллекцию. Но на самом деле это просто лучшая практика. Нет никаких причин, по которым ваш код не будет работать, просто бросьте нулевую проверку. Вы также можете использовать оператор проверки null, если используете более новую версию файла. NET.

Это было бы больше похоже на это:

view?.SortDescriptions.Clear()


и затем

<pre lang="c#">if (view?.CanFilter)