Я работал с исходным объектом представления коллекции, который привязан к списку, а CVS представляет собой представление поверх наблюдаемой коллекции объектов.
Я знаю, как применить фильтр, используя следующую технику:
cvs.Filter += new FilterEventHandler(SomeFilterFunction);
Это отлично работает, когда вы фильтруете только одну функцию. Проблема в том, что я хочу фильтровать поверх уже отфильтрованного CVS. Если у меня есть другая функция, которая фильтрует объекты в представлении на основе разных критериев, объекты фильтруются ТОЛЬКО по критериям во втором фильтре, а результаты первого фильтра исчезают.
Вот пример кода, объясняющий мою проблему:
cvs.Filter += new FilterEventHandler(SomeFilterFunction1);
cvs.Filter += new FilterEventHandler(SomeFilterFunction2);
public void SomeFilterFunction1(object sender, FilterEventArgs e)
{
SomeObject example = e.Item as SomeObject;
if(example.Name.Contains("A"))
{
e.Accepted = true;
}
else
{
e.Accepted = false;
}
}
public void SomeFilterFunction2(object sender, FilterEventArgs e)
{
SomeObject example = e.Item as SomeObject;
if(example.Name.Contains("B"))
{
e.Accepted = true;
}
else
{
e.Accepted = false;
}
}
Итак, в этом примере мне нужны только «SomeObjects» с буквами A и B, принимаемыми фильтрами. Моя проблема заключается в том, что при вызове cvs+=Filter с помощью filterfunction2 принимаются только имена объектов, содержащие букву B, без учета объектов с буквой A. Таким образом, имена объектов, содержащие букву B, но не A, принимаются, когда они не должны быть .
Моим текущим решением этой проблемы было создание функции фильтра «Мастер», в которой есть каждая функция фильтра, и я запускаю каждый объект через каждый фильтр, и если объект проходит через ВСЕ фильтры, он принимается. Это работает, но мой код сейчас сходит с ума, а логика выходит из-под контроля. Кто-нибудь знает, как применить новую функцию фильтра к результату последнего фильтра для CVS? Почему CVS просто не делает это автоматически вместо того, чтобы посылать каждый объект через каждый фильтр, или я неправильно думаю о CVS?