Необходимо отфильтровать данные в CollectionViewSource в событии Filter.
В CollectionViewSource у меня находится коллекция одного класса.
С фильтром по 1 полю проблем нет. Но понадобилось сделать множественный фильтр с таким условием:
Есть 7 полей в таблице. На каждое поле есть кнопка включения фильтра по этому полю.
Подскажите как реализовать фильтр таким образом что бы при включении больше 1 фильтра они накладывались друг на друга.
Поясню на картинках что у меня получилось и как должно работать.
Есть список товаров. Все фильтры выключены. Мы видим всё.
Это правильно.
Включаем фильтр по полю Наименование. Видим только товары содержащие в названии фрагмент "тор".
Это правильно.
Включаем фильтр по полю Группа2, желая из списка товаров содержащих в имени ТОР увидеть только те, которые относятся к группе с текстом "Закуски". Но получаем список содержащий "ТОР" ИЛИ "Закуски".
Неправильно.
Получаем
Мне нужно что бы в этом случае и последующих наложениях работало по И.
Для желающих ниже покажу код, по которому работает сейчас.
if (cgA != null)
{
//если хотя бы 1 фильр включен, то проверяем условия
if ( this.dgGoodsAllF1.IsChecked.Value ||
this.dgGoodsAllF2.IsChecked.Value ||
this.dgGoodsAllF3.IsChecked.Value ||
this.dgGoodsAllF4.IsChecked.Value ||
this.dgGoodsAllF5.IsChecked.Value ||
this.dgGoodsAllF6.IsChecked.Value ||
this.dgGoodsAllF7.IsChecked.Value ||
this.dgGoodsAllF8.IsChecked.Value ||
this.dgGoodsAllF9.IsChecked.Value ||
this.cbOnLink.IsChecked.Value ||
this.cbInMatrix.IsChecked.Value ||
this.cbOnLink.IsChecked.Value)
{
if (
(this.dgGoodsAllF1.IsChecked == true && cgA.Code.ToString() == this.dgGoodsAllT1.Text)
|| (this.dgGoodsAllF2.IsChecked == true && (cgA.NameLong.ToUpper().Contains(this.dgGoodsAllT2.Text.ToUpper())))
|| (this.dgGoodsAllF3.IsChecked == true && (cgA.cgGroup2.NameLong.ToUpper().Contains(this.dgGoodsAllT3.Text.ToUpper())))
|| (this.dgGoodsAllF4.IsChecked == true && (cgA.cgGroup3.NameLong.ToUpper().Contains(this.dgGoodsAllT4.Text.ToUpper())))
|| (this.dgGoodsAllF5.IsChecked == true && (cgA.cgGroup4.NameLong.ToUpper().Contains(this.dgGoodsAllT5.Text.ToUpper())))
|| (this.dgGoodsAllF6.IsChecked == true && (cgA.cgGroup5.NameLong.ToUpper().Contains(this.dgGoodsAllT6.Text.ToUpper())))
|| (this.dgGoodsAllF7.IsChecked == true && (cgA.cgGroup6.NameLong.ToUpper().Contains(this.dgGoodsAllT7.Text.ToUpper())))
|| (this.dgGoodsAllF8.IsChecked == true && (cgA.cgGroup7.NameLong.ToUpper().Contains(this.dgGoodsAllT8.Text.ToUpper())))
|| (this.dgGoodsAllF9.IsChecked == true && (cgA.cgGroup8.NameLong.ToUpper().Contains(this.dgGoodsAllT9.Text.ToUpper())))
|| (this.cbOnLink.IsChecked == true && (cgA.Group5GUID == null))
|| (this.cbInMatrix.IsChecked == true && (cgA.InMatrix == true))
)
e.Accepted = true;
else
e.Accepted = false;
}
else e.Accepted = true;
}