Для WPF DataGrid привязан источник данных ObservableCollection<>. Колонки заданы как обычные DataGridTextColumn. После редактирования ячейки, если нажать например Enter, изменяется свойство из соответствующего ряда, но обработчик события CollectionChanged коллекции-источника не вызывается. Как отловить момент, когда после изменения текста ячейки меняется свойство в связанном объекте?
Событие CollectionChanged отправляется лишь при изменении самой коллекции, то есть, добавлении/удалении/замене целых элементов. При изменениях самих элементов CollectionChanged не отправляется.
Для отлова изменения внутри элемента вам нужно (при добавлении этого элемента) подписаться на событие PropertyChanged, если ваш тип данных элемента поддерживает интерфейс INotifyPropertyChanged. Впрочем, DataGrid по идее делает это самостоятельно, вам не должно быть нужно об этом заботиться.
Если же ваш элемент не имплементирует INotifyPropertyChanged, то нормального метода отловить изменения внутри элемента нет. Поэтому объекты, используемые в качестве источника данных для UI-контролов, практически обязаны имплементировать INotifyPropertyChanged.
У элемента коллекции, у нужного свойства в сеттере прописать логику.
Можно управление построить на основе событий.
т.е.
ObservableCollection<MyClass> MyClassCollection{get;set;}, в свою очередь
class MyClass
{
private string _property;
public string Property
{
get{return _property;}
set{
//event
_property = value;
}
}
}
Продвижение своими сайтами как стратегия роста и независимости