2015-11-10 4 views
0

У меня есть 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();, но это еще не вариант, потому что сетка является очень сложным и делает занять некоторое время, чтобы обновить.

Любые идеи?

+0

если (datagrid.Items.NeedReferesh) datagrid.Items.Referesh() попробовать, что –

+0

не работает. но спасибо –

+0

попробуйте это, это может работать .... datagrid.ItemsSource = null; datagrid.ItemsSource = someData; –

ответ

0

Ваш ItemsSource должен быть

ItemsSource="{Binding VarConfigList,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" 
+0

Я пробовал это раньше, ничего не менял –

Смежные вопросы