Я создал пользовательский элемент управления, который добавляет фильтр к каждому столбцу таблицы данных.Моя сетка данных ограничена как пользовательский класс, связанный как 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 по-прежнему рассматривает его как тот же фильтр.
любые объяснения / помощь / предложения / альтернативы, пожалуйста ??