您可以在属性成员的结合使用UpdateSourceTrigger=PropertyChanged
为datagrid。这将确保当CellEditEnding被触发时,更新已经被反映在可观察集合中。
参见下面
<DataGrid SelectionMode="Single"
AutoGenerateColumns="False"
CanUserAddRows="False"
ItemsSource="{Binding Path=Items}" // This is your ObservableCollection
SelectedIndex="{Binding SelectedIndexStory}">
<e:Interaction.Triggers>
<e:EventTrigger EventName="CellEditEnding">
<cmd:EventToCommand PassEventArgsToCommand="True" Command="{Binding EditStoryCommand}"/> // Mvvm light relay command
</e:EventTrigger>
</e:Interaction.Triggers>
<DataGrid.Columns>
<DataGridTextColumn Header="Description"
Binding="{Binding Name, UpdateSourceTrigger=PropertyChanged}" /> // Name is property on the object i.e Items.Name
</DataGrid.Columns>
</DataGrid>
UpdateSourceTrigger =的PropertyChanged会立即改变属性源只要目标属性更改。
这将允许您捕获对项目的编辑,因为将事件处理程序添加到可观察集合中。更改事件不会触发集合中对象的编辑。
事实上,在我发布这个问题之前,我就是这么做的。当用户修改集合时,CollectionChanged事件不会被触发 –
这不是您的答案,但CollectionChanged仅在以某种方式添加或删除项目时才报告。有可能网格让你修改一个项目而不会真正改变集合本身,所以不会触发上述事件。 – NestorArturo
Woops,是的,误解在这里,当一个完整的'Item'会改变时(即你放置一个新的Item()而不是前一个)''CollectionChanged'会被触发。你需要你的'Item'类来实现'INotifyPropertyChanged',如果你想抓住每一个修改:) – Damascus