2013-12-17 7 views
1

Хорошо, ребята, Итак, у меня есть Datagrid, который обновляется данными из выпадающего списка изнутри viewmodel. Все работает нормально. Недавно мне пришлось внести изменения, связанные с щелчком DatagridColumnHeader. Единственное, что я мог думать, чтобы справиться с ней таким образом, и это было с помощью CodeBehind :(.WPF DataGrid не будет обновляться после изменения кода

<DataGrid.Resources> 
    <Style TargetType="{x:Type DataGridColumnHeader}"> 
        <EventSetter Event="Click" Handler="columnHeader_Click" /> 
       </Style> 
</DataGrid.Resources> 

и в коде позади обрабатываются это событие. Теперь в коде позади Я внесении изменений в Datagrid

System.Windows.Controls.Primitives.DataGridColumnHeader col = (System.Windows.Controls.Primitives.DataGridColumnHeader)sender; 
      ObservableCollection<tbMain> dc = (ObservableCollection<tbMain>)m_DataGrid.DataContext; 
ObservableCollection<tbMain> sortedNewId = new ObservableCollection<tbMain>(); 

m_DataGrid.ItemsSource = sortedNewId; 
m_DataGrid.Items.Refresh(); 

Теперь весь этот код работает и обновляет мой DataGrid, но я, похоже, нарушил привязку между viewmodel и DataGrid, потому что теперь, когда я выбираю что-то из раскрывающегося списка, он больше не обновляет сетку новыми данными, пока я не щелкните заголовок DataGrid. Любая идея ребята

+1

Почему вы меняете ItemSource вашей сетки данных на новую коллекцию, вместо того, чтобы использовать коллекцию, предоставляемую вашим просмотреть модель? (Сортировка не требует изменения ItemsSource.) – elgonzo

+0

Попробуйте удалить 'Items.Refresh()'. Это может вызвать некоторые проблемы, поскольку он должен обновляться, когда вы устанавливаете 'ItemsSource'. Еще одна вещь, которую стоит попробовать - фактически передать вашу новую коллекцию в методе DataGrid.SetBinding (...). – TyCobb

+0

@elgonzo причина, по которой я это делаю, потому что иначе мой datagrid не отображает отсортированные данные в порядке возрастания или убывания. – bewilderedprogrammer

ответ

0

Кажется, что вы меняете DataGrid's Items Source from Binding Expression (который уведомляет datagrid, что источник был обновлен), к простой ссылке на коллекцию, тем самым устраняя логику обновления. Вы должны изменить исходную коллекцию, а не элемент Source. Вы можете использовать CollectionView в качестве источника выражения привязки для сортировки, добавив SortDescriptions в CollectionView и вызывая Refresh on.

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