您可以在屬性成員的結合使用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