Так что на самом деле это не вопрос, а решение проблемы, с которой я столкнулся последние 3 дня, приветствуется любое улучшение.Таким образом, у меня есть таблица данных, которая отображает выбранный продукт, у каждого продукта также могут быть дочерние элементы, называемые ингредиентами, эти ингредиенты должны быть добавлены в коллекцию, но не отображены для пользователя.
Решение, которое я придумала для этого, - этониже.Предложение "Закомментировано где" было моей первой попыткой.
public ObservableCollection<ProductSaleTransaction> gProductSale = new ObservableCollection<ProductSaleTransaction>();
public ObservableCollection<ProductSaleTransaction> ProductSaleCollection
{
get { return gProductSale/*.Where(s => s.category != "Ingredients").ToObservableCollection<ProductSaleTransaction>()*/; }
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
dgProductTchSale.ItemsSource = ProductSaleCollection;
ProductSaleCollection.CollectionChanged += ProductSaleCollection_CollectionChanged;
}
private void ProductSaleCollection_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
ICollectionView view = CollectionViewSource.GetDefaultView(ProductSaleCollection);
view.Filter = new Predicate<object>(filterIngredient);
}
public bool filterIngredient(object item)
{
var vaitem = (ProductSaleTransaction)item;
if (vaitem == null)
return false;
else
{
bool it = false;
it = vaitem.category != "Ingredient";
return it;
}
}
В результате все элементы, добавленные в коллекцию, отображаются только для элементов, не входящих в категорию ингредиентов.
Эточто я придумала для решения автоматической фильтрации элементов, которые я хочу сохранить в базе данных со всем нижестоящим кодом, но не для того, чтобы отображать их пользователю.