Отображение только подмножества элементов в Datagrid WPF C # - PullRequest
0 голосов
/ 19 марта 2019

Так что на самом деле это не вопрос, а решение проблемы, с которой я столкнулся последние 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;          
        }                        
}

В результате все элементы, добавленные в коллекцию, отображаются только для элементов, не входящих в категорию ингредиентов.

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

1 Ответ

0 голосов
/ 19 марта 2019

Фильтр ICollectionView оценивается автоматически, когда его базовая коллекция добавляет / удаляет элементы. Таким образом, вам не нужно создавать новый ICollectionView каждый раз, когда коллекция изменяется.

Вместо этого переместите линии

ICollectionView view = CollectionViewSource.GetDefaultView(ProductSaleCollection);
view.Filter = new Predicate<object>(filterIngredient);

до Window_Loaded и удалить событие ProductSaleCollection_CollectionChanged.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...