У меня есть datagrid, который связал ObservableCollection. Выполнение INotifyPropertyChanged работает так, как должно. Я сгруппировал DataGridView с обзором коллекции:Группа не обновляет, когда Itemsource изменен программно - WPF, C#
CollectionViewSource.GetDefaultView(dgVarConfig.ItemsSource).GroupDescriptions.Clear();
CollectionViewSource.GetDefaultView(dgVarConfig.ItemsSource).GroupDescriptions.Add(new PropertyGroupDescription("TopLevelGroup"));
CollectionViewSource.GetDefaultView(dgVarConfig.ItemsSource).GroupDescriptions.Add(new PropertyGroupDescription("Group"));
CollectionViewSource.GetDefaultView(dgVarConfig.ItemsSource).Refresh();
Это работает как ожидалось, но одна проблема. Когда я изменяю «TopLevelGroup» в datagrid, сетка обновляется, а функция groupassignment работает правильно. Если я изменяю его через окно WPF, он не обновляет сетку.
Код:
public void changeGroup(String group, VarConfig selectedVarConfig)
{
selectedVarConfig.TopLevelGroup = group;
}
Чтобы быть ясна: groupcell в изменениях сетки, но не работает задание автоматически. Если я дважды щелкнуть ячейку и выйти из режима редактирования, она перейдет к правильной группе.
<DataGrid x:Name="dgVarConfig" ItemsSource="{Binding VarConfigList}" SelectedItem="{Binding Path=SelectedVarConfig, Mode=TwoWay}" Margin="8,56,557,80" AutoGenerateColumns="False" CanUserDeleteRows="False" CanUserResizeRows="False" HeadersVisibility="Column" CanUserAddRows="False" LayoutUpdated="dgVarConfig_LayoutUpdated" HorizontalScrollBarVisibility="Auto" PreviewKeyDown="dgVarConfig_PreviewKeyDown" BeginningEdit="dgVarConfig_BeginningEdit" CellEditEnding="dgVarConfig_CellEditEnding" SelectionChanged="dgVarConfig_SelectionChanged" LoadingRow="dgVarConfig_LoadingRow">
Она будет работать с CollectionViewSource.GetDefaultView(dgVarConfig.ItemsSource).Refresh();
, но это еще не вариант, потому что сетка является очень сложным и делает занять некоторое время, чтобы обновить.
Любые идеи?
если (datagrid.Items.NeedReferesh) datagrid.Items.Referesh() попробовать, что –
не работает. но спасибо –
попробуйте это, это может работать .... datagrid.ItemsSource = null; datagrid.ItemsSource = someData; –