我有一个DataGrid,它绑定到一个可观察的clsActivity对象集合。
我想找到用户修改行的时间,然后更新后端数据库。
我已尝试使用gridview的SelectionChanged和RowEditEnding事件,但RowEditEnding不会显示更新的更改,只显示原始行内容。
我已经看过使用可观察集合的OnCollectionChanged但是当它处理添加/删除时,它不处理更改。另外看看使用INotifyPropertyChanged,但这看起来我必须监视每一行中的每个属性及其一个大的DataGrid。
是否有一种检测和捕获连续变化的简单方法?
是否有替代(免费)DataGrid控件可以处理更新?
这在winforms中很容易做到(并在几年前访问!)
我的DataGrid
<DataGrid x:Name="dataGridActivities" HorizontalAlignment="Left" Margin="10,51,0,0" VerticalAlignment="Top" RenderTransformOrigin="-0.608,-2.219" Height="285" Width="411" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding activityStart, StringFormat=\{0:dd/MM/yyyy\}}" Header="Date" />
<DataGridTextColumn Binding="{Binding activityStartTime}" Header="Start Time"/>
<DataGridTextColumn Binding="{Binding activityEndTime}" Header="End Time"/>
<DataGridTextColumn Binding="{Binding notes}" Header="Notes" Width="*"/>
</DataGrid.Columns>
</DataGrid>
我的dataGrid事件代码
'This picks up the original contents of the row fine. I was hoping to store this and compare against the new contents in the next sub
Private Sub dataGridActivities_SelectionChanged(sender As Object, e As SelectionChangedEventArgs) Handles dataGridActivities.SelectionChanged
Dim myActivity As New clsActivity
myActivity = CType(dataGridActivities.SelectedItem, clsActivity)
Debug.Print("SelectionChanged: " & CType(dataGridActivities.SelectedItem, clsActivity).ID)
Debug.Print("Proj ID:" & myActivity.projectID & ", userID: " & myActivity.userID &
", notes:" & myActivity.notes)
End Sub
'This code just doesn't seem to pick up any changed data.
Private Sub dataGridActivities_RowEditEnding(sender As Object, e As DataGridRowEditEndingEventArgs) Handles dataGridActivities.RowEditEnding
Dim myActivity As New clsActivity
myActivity = CType(dataGridActivities.SelectedItem, clsActivity)
Debug.Print("RowEditEnding for row: " & CType(dataGridActivities.SelectedItem, clsActivity).ID)
Debug.Print("Proj ID:" & myActivity.projectID & ", userID: " & myActivity.userID &
", notes:" & myActivity.notes)
'Was hoping to pick up the new contents of the row, then process them back to the database
End Sub