У меня есть коллектив объекта ItemType, каждый из которых имеет дочернюю коллекцию Item. Коллекция верхнего уровня завернута в ObservableCollection, поэтому он отвечает, когда пользователи добавляют или удаляют вещи из коллекции. Это связано с TreeView, так что каждый ItemType отображает дочерние элементы ниже.Фильтровать дочерние элементы объектов в ICollectionView
Что бы я хотел сделать, это использовать фильтр, чтобы избавиться от дочерних объектов Item, которые установлены для удаления. Я изо всех сил, потому что фильтр нужно логическое сказуемое и, конечно же, только на высшем уровне ItemType получает передается в Например:.
public void UpdateObservableCollection()
{
QuoteItemTypesView = CollectionViewSource.GetDefaultView(QuoteItemTypes);
QuoteItemTypesView.Filter = FilterDeleted;
}
public bool FilterDeleted(object item)
{
ItemType it = item as ItemType; // only ItemType is ever passed in
if(it.IsDeleted)
{
return false;
}
return true;
}
не хорошо, потому что это удаления ItemType, а не какой-либо из Элементы внизу.
Я попытался сделать это:
public bool FilterDeleted(object item)
{
ItemType it = item as ItemType;
var itemsToRemove = new List<Item>();
foreach (Item i in it.Items)
{
if (i.IsDeleted)
{
itemsToRemove.Add(i);
}
}
foreach (var foo in meh)
{
it.Items.Remove(foo);
}
return true;
}
Но это заканчивается на самом деле удаления элементов из основной коллекции, а не выполняя фактический фильтр.
Есть ли способ фильтровать детскую коллекцию?
+1 - это гениально. К сожалению, я не могу использовать его, потому что ItemType - это объект EF. Я не могу получить доступ к его дочерним элементам до тех пор, пока он не будет создан :( –
. В соответствии с наилучшими практиками вы должны сопоставить модель EF с ViewModel, чтобы уровень представления привязывался только к ViewModel и не имеет прямого использования модели EF/DB. – user1672994
Да. Узнавайте, почему это лучшая практика немного поздно в тот же день. –