ObservableCollection получит обновление, потому что ObservableCollection (System.Collections.ObjectModel) генерирует событие каждый раз, когда коллекция изменяется, но вы должны снова установить коллекцию фильтров как itemsource, иначе не будет обновляться пользовательский интерфейс ...
Лучший способ сделать это - использовать открытое свойство, которое вы будете связывать в элементе управления как источник элемента, и в этом свойстве вы определите NotifyPropertyChanged в установщике. Каждый раз, когда вы будете изменять коллекцию с помощью этого свойства, элемент управления также будет обновляться ...
Предположим, у вас есть сетка данных в test.xaml
-> Сначала для всей работы с INotifyPropertyChanged добавьте абстрактный класс в свой проект, унаследуйте его от интерфейса INotifyPropertyChanged и определите метод OnPropertyChanged
public abstract class ViewModelBase : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
}
-> После добавления в ваш проект класса с именем testViewModel, который унаследует ваш класс ViewModelBase.
-> Теперь в testViewModel вы создадите свойство для вашей привязки к сетке, как это
Private ObservableCollection<Record> _recordObservableCollection
public ObservableCollection<Record> recordObservableCollection
{
get
{
if(_recordObservableCollection == null)
{
_recordObservableCollection = new ObservableCollection<Record>(GetData());
recordObservableCollection = new ObservableCollection<Record>(recordObservableCollection.Where(filter));
}
return _recordObservableCollection;
}
Set
{
_recordObservableCollection = Value;
OnPropertyChanged("recordObservableCollection"); //Your property name
}
}
здесь и сейчас, если вы обновите свою коллекцию, используя свойство любого другого свойства, метод или команда. Пользовательский интерфейс будет обновлен, так как вы установили OnPropertyChanged ...
Теперь вернемся к test.xaml, здесь нужно сделать две вещи
Установить dataContext для test.xaml либо в коде behing, либо в xaml
(В коде сразу после InitializeComponent () создайте экземпляр класса viewmodel и назначьте его как DataContext следующим образом
public test()
{
InitializeComponent();
testViewModel vm = new testViewModel();
this.DataContext = vm;
}
Свяжите свойство, которое вы определили в testViewModel, с сеткой
<Grid Name="MyGrid" DataContext="{Binding recordObservableCollection}">
</Grid>