WPF DataGrid如何获取ItemsSource更新时
Posted
技术标签:
【中文标题】WPF DataGrid如何获取ItemsSource更新时【英文标题】:WPF DataGrid how to get when ItemsSource updates 【发布时间】:2010-11-09 13:47:04 【问题描述】:DataGrid 的源更新时会触发哪个事件?我已经尝试过 DataContextChanged 和 SourceUpdated 但它从未成功过。
其实我需要一个简单的东西。我想,如果有新行出现,将 GridView 的滚动条向下滚动到底部以查看它是什么。
【问题讨论】:
当您说“当有新行进入时”是指底层数据源(数据库)还是 DataGrid 数据源? 我的意思是 GridView 的 ItemsSource。 【参考方案1】:我遇到了同样的问题,我是这样解决的
DataGrid myGrid = new DataGrid();
CollectionView myCollectionView = (CollectionView)CollectionViewSource.GetDefaultView(myGrid.Items);
((INotifyCollectionChanged)myCollectionView).CollectionChanged += new NotifyCollectionChangedEventHandler(DataGrid_CollectionChanged);
然后您需要在事件处理程序DataGrid_CollectionChanged
中实现逻辑。
【讨论】:
【参考方案2】:为 ItemsSource 绑定设置 NotifyOnTargetUpdated = true 并处理 TargetUpdated 事件。如果您有多个绑定,则查找 DataTransferEventArgs 属性以了解目标是否为 ItemsSource。
【讨论】:
【参考方案3】:如果您尝试在将某些内容添加到数据库本身时刷新网格,则不会发生这种情况。我对 WinForms 比 WPF 更熟悉,但我假设没有任何神奇的方法可以让网格与数据库保持同步,而无需编写一些持续检查数据库更改的后台进程。
如果您要更新网格的实际数据源(例如集合),那么这将更新网格。
【讨论】:
是的,我有一些收藏,它通过 ItemsSource 与 GridView 绑定。 实际上,WPF 相对于 WinForms 的优势之一是能够将网格绑定到数据集并自动更新 UI【参考方案4】:就我而言,我使用了引发每个事件 Del/Add/Edit/Select 的 SelectionChange 通知 效果很好
private void dataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
Console.WriteLine("hi");
【讨论】:
以上是关于WPF DataGrid如何获取ItemsSource更新时的主要内容,如果未能解决你的问题,请参考以下文章
WPF DataGrid如何获取ItemsSource更新时