У меня есть два экземпляра CollectionViewSource:
<FrameworkElement.Resources>
<CollectionViewSource x:Key="currentImages" Source="{Binding ImageFiles}" />
<CollectionViewSource x:Key="toDeleteImages" Source="{Binding ImageFiles}" />
</FrameworkElement.Resources>
Оба связаны с одним и тем же ObservableCollection<ImageFileDetails>
(в свойстве ImageFiles
модели представления):
// implements INPC via Fody.PropertyChanged
[AddINotifyPropertyChangedInterface]
public class ImageFileDetails {
public string Path { get; set; }
public bool ToDelete { get; set; }
}
Разница между двумя коллекциями CollectionViewSources заключается в фильтрах:
(Resources("currentImages") as CollectionViewSource).Filter += (s,e) =>
e.Accepted = !e.Item<ImageFileDetails>().ToDelete;
(Resources("toDeleteImages") as CollectionViewSource).Filter += (s, e) =>
e.Accepted = e.Item<ImageFileDetails>().ToDelete;
Теперь у меня есть две DataGrids, каждая из которых связана с одним из CollectionViewSources. Я хочу иметь возможность нажать клавишу DELETE на одной из сеток данных и переместить элемент в другую. Элемент на самом деле не должен быть удален из коллекции, а свойство ToDelete
должно быть переключено - с true
до false
и с false
до true
.
Я попытался обработать событие CollectionChanged
на ObservableCollection
и повторно добавить элемент, который был удален из коллекции:
vm.ImageFiles.CollectionChanged += (s, e) => {
if (e.Action != Remove) { return; }
foreach (ImageFileDetails x in e.OldItems) {
x.ToDelete = !x.ToDelete;
vm.Imagefiles.Add(x);
}
};
но это не с:
System.InvalidOperationException: 'Невозможно изменить ObservableCollection во время события CollectionChanged.'
Как я могу отменить удаление предмета из коллекции?