C # WPF MVVM фильтрация столбцов использование текстовых полей - PullRequest
0 голосов
/ 22 февраля 2019

В шаблоне MVVM у меня есть 16 различных строк, привязанных к 16 текстовым полям для фильтрации столбцов, каждая из которых имеет измененное свойство, назначенное при создании.Логика терпит неудачу из-за того, что остальные поля по умолчанию остаются пустыми по умолчанию во время выполнения.Я хочу игнорировать пустые поля.Если я заполню каждое поле в списке, то оно будет работать как положено.

Что я хочу: если пользователь случайным образом выбирает поля 1, 5 и 15 для заполнения текстом, то он должен принимать только те из них для фильтрации и игнорировать оставшиеся пустые.Если пользователь ничего не заполняет, он должен продолжать показывать всю таблицу.

Что я пробовал: Я пытался взять все поля и установить! = "" И! = null перед добавлением в список, а затем возвращает тип списка в виде строки для фильтрации.Создание foreach тоже не помогло.См. Пример ниже:

public List<String> FilterList()
    {

        List<String> filters = new List<string>();

        if (!Filterbox1.Equals("") && !Filterbox1.Equals(null))
        {
            filters.Add(Filterbox1);
        }

        if (!Filterbox2.Equals("") && !Filterbox2.Equals(null))
        {
            filters.Add(Filterbox2);
        }

        return filters;   
    }

Исходный код, с которым я пытался работать:

 string[] ColumnFilter = new[] { Filterbox1, Filterbox2, Filterbox3, Filterbox4, Filterbox5, Filterbox6, Filterbox7, Filterbox8, Filterbox9, Filterbox10, Filterbox11, Filterbox12, Filterbox13, Filterbox14, Filterbox15, Filterbox16 };

 _dataGridModel.DataTableMergeren = new DataView(MainTable).ToTable(false, ColumnFilter);

Ответы [ 2 ]

0 голосов
/ 23 февраля 2019

Когда вы инициализируете свои текстовые поля, вы должны сделать что-то вроде Filterbox1.Text = String.Empty или что-то подобное.Это должно позволить вам ссылаться на них без получения ошибки (и не выполнять нулевую проверку).

Однако это по-прежнему не исправляет эффективность кода.Я рекомендую изучить элементы управления пользователя и запустить цикл, чтобы создать 16 из них при запуске программы.Тогда вы можете избежать уникальных имен для 16 текстовых ящиков, которые по сути одинаковы.

0 голосов
/ 22 февраля 2019

Пожалуй, лучший способ сделать это - использовать что-то вроде этого:

public List<string> FilterList(string[] FilterBoxes)
    {
        List<string> R = FilterBoxes.Where(x => String.IsNullOrWhiteSpace(x) == false).ToList<string>();
        return R;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...