В моем приложении есть окно со следующими ресурсами:
<Window.Resources>
<ResourceDictionary>
<Data:IssueRecords x:Key="DataSource"/>
<CollectionViewSource x:Key="DataCollection" Source="{StaticResource DataSource}"
Filter="CollectionViewSource_Filter">
</CollectionViewSource>
</ResourceDictionary>
</Window.Resources>
Существует стандартный обработчик событий - метод, называемый CollectionViewSource_Filter и DataGrid, к которому применяется фильтр.После загрузки моего окна все работает отлично, включая фильтры.
Для применения фильтров я вызываю метод ReloadGrid ...
private void ReloadGrid(object sender, RoutedEventArgs e)
{
CollectionViewSource.GetDefaultView(GridData.ItemsSource).Refresh();
}
Но когда пользователь выполняет какое-либо действие, которое вносит измененияв мою базу данных (удалить, изменить или создать новую), мне нужно перезагрузить эти источники данных, поэтому я звоню ...
private void ReloadDataSources()
{
var dataSource = this.FindResource("DataSource") as IStockRecords;
dataSource.ReloadData();
var dataCollection = this.FindResource("DataCollection") as CollectionViewSource;
dataCollection = new CollectionViewSource() { Source = dataSource };
dataCollection.Filter += new FilterEventHandler(CollectionViewSource_Filter);
Binding binding = new Binding() { Source = dataCollection };
BindingOperations.SetBinding(GridData, DataGrid.ItemsSourceProperty, binding);
}
Я думаю, я делаю все, что нужно для чтения фактических данных избазы данных и перезагрузите источники данных в моем окне.Но когда я использую какой-либо фильтр, после вызова ReloadDataSources () событие фильтра больше не используется.Я отлаживал исходный код, и метод Refresh не вызывает CollectionViewSource_Filter, даже когда я устанавливаю FilterEventHandler ...
Я что-то пропустил?Спасибо, JiKra