У меня есть WPF DataGrid, источником данных которого является ObservableCollection. Это настроено свободно как следующее:
public class ItemDataCollection : ObservableCollection<ItemData>
{
}
public class ItemData : INotifyPropertyChanged
{
private bool _selected = true;
public bool Selected
{
get
{
return _selected;
}
set
{
if (value != _selected)
{
_selected = value;
NotifyPropertyChanged("Selected");
}
}
}
}
_itemDataCol = new ItemDataCollection();
<... fill the _itemDataCol with data here ...>
dataGrid1.ItemsSource = _itemDataCol;
Когда коллекция обновляется, dataGrid1.Items.Refresh () корректно обновляет dataGrid1. Однако, когда я изменяю свойство «Выбрано» строки, устанавливая или снимая флажок в строке, соответствующей этому свойству, элемент в коллекции не обновляется. Я посмотрел на событие CollectionChanged ObeservableCollection, но это не похоже на срабатывание. Какая проводка мне нужна, чтобы получить dataGrid1 для обновления коллекции.
Обновление
Все, что я делал, это устанавливал свойство ItemSource в ObservableCollection и позволял автоматически генерировать столбцы. С тех пор я изменил привязку напрямую и нашел более подробную информацию о проблеме. Когда я просто устанавливаю флажок - уведомление не запускается. Однако, если я нажму после установки флажка, то коллекция будет обновлена. Вот привязка:
<DataGridCheckBoxColumn Binding="{Binding Path=Selected, Mode=TwoWay}" Header="Selected"></DataGridCheckBoxColumn>
Так что я думаю, вопрос в том, как мне получить обновление с необходимостью нажимать после установки или снятия флажка?
Обновление № 2
(Я не могу ответить, так как мой представитель еще недостаточно высок)
ОК - думаю, у меня есть решение. Если я включу «UpdateSourceTrigger = PropertyChanged» в привязку, все, кажется, работает.
<DataGridCheckBoxColumn Binding="{Binding Path=Selected, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Header="Selected"></DataGridCheckBoxColumn>
Пожалуйста, оставляйте комментарии, если есть какие-либо негативные последствия этого, которые я могу пропустить. Спасибо за помощь!