У меня есть ObservableCollection
для моего базового списка предметов.У меня 2 CollectionViewSource
, которые являются разными фильтрами данных.Я хочу, чтобы любые изменения отражались в CollectionViewSource
.
. В моем конструкторе модели представления я устанавливаю предикаты фильтра.Затем я получаю данные и добавляю их к ObservableCollection
.Я подписан на событие CollectionChanged
и обновляю там CVS.
Хотя я вижу некоторые действительно странные вещи с этим.Либо элементы не будут отображаться в моем ListBox
, связанном с CVS, либо появятся дубликаты.Если я позвоню Refresh
на CVS вне события CollectionChanged
после изменения ObservableCollection
, все будет работать нормально.Мне бы очень хотелось иметь возможность просто обновлять, когда коллекция меняется, и не беспокоиться о необходимости вызывать обновление каждый раз, когда что-то делается, что меняет это.
public MyViewModel()
{
oc.CollectionChanged += OcCollectionChanged;
cvs1.Source = oc;
cvs1.View.Filter = new Predicate<object>( ... );
cvs2.Source = oc;
cvs2.View.Filter = new Predicate<object>( ... );
foreach( var data in myData )
{
oc.Add( data );
}
}
private void OcCollectionChanged( object sender, NotifyCollectionChangedEventArgs e )
{
cvs1.View.Refresh();
cvs2.View.Refresh();
}