WPF数据表格如何获取ItemsSource更新的时间

15

DataGrid 的源正在更新时会触发哪个事件?我已经尝试过 DataContextChanged 和 SourceUpdated 了,但都没有生效。

实际上我只需要一个简单的功能。如果有新行添加,让 GridView 的滚动条自动滚动到底部以便查看新增的内容。


当你说“当一个新行进来时”是指底层数据源(数据库)还是DataGrid数据源? - Cody C
我的意思是GridView的ItemsSource。 - iLemming
4个回答

28

我曾经遇到同样的问题,我是这样解决的

DataGrid myGrid = new DataGrid();
CollectionView myCollectionView = (CollectionView)CollectionViewSource.GetDefaultView(myGrid.Items);
((INotifyCollectionChanged)myCollectionView).CollectionChanged += new NotifyCollectionChangedEventHandler(DataGrid_CollectionChanged);

然后您需要在事件处理程序 DataGrid_CollectionChanged 中实现逻辑。


8

将NotifyOnTargetUpdated属性设置为true,用于ItemsSource绑定,并处理TargetUpdated事件。如果您有多个绑定,请查找DataTransferEventArgs属性以确定目标是否为ItemsSource。


3
如果你想在数据库中添加内容时刷新网格,那是不可能的。我更熟悉WinForms而不是WPF,但我认为没有神奇的方法可以在不编写后台进程连续检查数据库更改的情况下保持网格与数据库同步。
如果你更新网格的实际数据源(例如集合),那么它将更新网格。

是的,我有一些集合,并且通过ItemsSource与GridView绑定。 - iLemming
实际上,WPF 相对于 WinForms 的一个优势便是能够将网格绑定到数据集并自动更新用户界面。 - Brian J

2

就我而言,我使用了SelectionChange通知,它会触发每个事件Del/Add/Edit/Select。它的效果非常好。

private void dataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    Console.WriteLine("hi");
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接