wpf DataGrid 捕获修改后的行
时间: 2024-09-23 19:10:43 浏览: 39
具有Excel样式列过滤器的WPF DataGrid
5星 · 资源好评率100%
WPF 中的 `DataGrid` 控件允许用户编辑其内容,并且默认情况下,它会将用户的更改保存到数据源。若你想捕获用户在 DataGrid 行中所做的修改,可以利用 `ICollectionView` 的事件机制。
首先,你需要创建一个 `ICollectionView` 并绑定到你的数据模型集合:
```xaml
<DataGrid ItemsSource="{Binding YourDataSourceCollection}"
ItemEditing="DataGrid_OnItemEditing"
...>
</DataGrid>
```
然后,在 XAML.cs 或 ViewModel 中,添加 DataGrid 的 `ItemEditing` 事件处理方法:
```csharp
private void DataGrid_OnItemEditing(object sender, DataGridEditingEventArgs e)
{
if (e.IsNewRow)
{
// 对新行进行操作
var newRow = e.NewRow as YourDataType;
newRow.PropertyToTrackHasChanged = true; // 假设 PropertyToTrackHasChanged 用于标记已修改
// 添加观察者监听此属性变化
e.Row.AddHandler(YourDataType.PropertyToTrackPropertyChanged, OnPropertyValueChanged);
}
else
{
// 对已存在行进行操作
var editedRow = e.Row.DataContext as YourDataType;
editedRow.PropertyToTrackHasChanged = true;
// 同样监听属性变化
editedRow.PropertyToTrackPropertyChanged += OnPropertyValueChanged;
}
e.Commit();
}
private void OnPropertyValueChanged(object sender, PropertyChangedEventArgs e)
{
// 在这里检查 PropertyToTrack 是否已经改变,如果改变则进行相应的处理,比如更新数据库等
if (((YourDataType)sender).PropertyToTrackHasChanged)
{
// 更新数据库或其他业务逻辑
SaveChanges();
// 清除标记
((YourDataType)sender).PropertyToTrackHasChanged = false;
}
}
```
阅读全文