FilterEventHandler внутри пользовательского элемента управления не работает при повторном использовании пользовательского элемента управления - PullRequest
0 голосов
/ 10 сентября 2018

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

вот как я применяю фильтр внутри моего пользовательского элемента управления.propName - это общедоступная переменная внутри пользовательского элемента управления, которая задает имя столбца, к которому привязан пользовательский элемент управления (снова пройдя по VisualTree, чтобы получить это).так что затем я использую это в фильтре для фильтрации на основе этого столбца, что позволяет мне выполнять всю фильтрацию в пользовательском элементе управления.

if(filterApplied == true)
        {
            CVS_DG2.Filter -= new FilterEventHandler(CVS_DG_Filter);
            CVS_DG2.Filter += new FilterEventHandler(CVS_DG_Filter);
        }
        else
        {
            CVS_DG2.Filter += new FilterEventHandler(CVS_DG_Filter);
            filterApplied = true;
        }

, и вот мой метод фильтрации внутри моего пользовательского элемента управления

        private void CVS_DG_Filter(object sender, FilterEventArgs e)
    {
        dynamic src = e.Item;
        var propertyInfo = src.GetType().GetProperty(propname);
        var value = propertyInfo.GetValue(src, null);
        if (value.Contains(tempfilter1Value))
        {
        }
        else
        {
            e.Accepted = false;
        }
    }

это прекрасно работает, когда я применяю фильтр к одному столбцу.но когда я иду применить другой фильтр к другому столбцу, первый фильтр не учитывается.

После тестирования нескольких вещей я обнаружил, что если я сделаю копию пользовательского элемента управления и изменим имя метода фильтра, тогда фильтрация будет работать правильно.Это похоже на то, что хотя метод фильтра находится в другом экземпляре пользовательского элемента управления, CollectionViewSource по-прежнему рассматривает его как тот же фильтр.

любые объяснения / помощь / предложения / альтернативы, пожалуйста ??

...