Ваш вопрос немного сложен для понимания. Я читаю это так, как будто вы задаетесь вопросом о различном поведении DataGrid
по сравнению с TreeView
?
Ваши ожидания верны: DataGrid
обновит ячейку, если изменилось связанное свойство.
Но в вашем случае этого никогда не происходит - по крайней мере, это то, что я могу сказать из вашего опубликованного кода. В отличие от ваших утверждений, даже ваш опубликованный конструктор не вызывает событие PropertyChanged
:
// Assignment of a field. Fields never raise PropertyChanged (your code)
folderExplorer = service.UpdateExplorer(null);
// Assignment of a property. Properties can raise PropertyChanged
FolderExplorer = service.UpdateExplorer(null);
Вы не опубликовали этот код, потому что считали его неважным. Поэтому я предполагаю, что вы ожидаете выполнения метода set FolderExplorer
.
Но этого не происходит по уважительной причине: свойства, которые фактически редактируются и обновляются, находятся внутри коллекции FolderExplorer.FoldersFiles
. Установите точку останова в классе элементов, которые содержатся в FoldersFiles
свойства Name
, и вы увидите, что методы набора свойств вызываются всякий раз, когда вы редактируете соответствующую ячейку DataGrid
.
Если изменяется вложенное свойство, например, FolderExplorer.FoldersFiles/FolderFile.Name
, то PropertyChanged
только для возбуждается для фактического (вложенного) свойства, а не для всех свойств верхнего уровня вдоль пути вложенного вызов свойства.
Кроме того, ваше сравнение поведения DataGrid
с поведением TreeView
недопустимо. Редактирование ячейки изменяет данные, а выбор - нет. Поэтому нажатие на ячейку не вызовет никаких событий PropertyChanged
. В этом случае изменение свойства произойдет только в том случае, если вы связываете DataGrid.SelectedItem
со свойством ViewModel
.