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更新时

wpf datagrid中如何获取选中行中模板如textbox,combobox的内容

如何获取 WPF DataGrid 的单元格级别组合框?

如何获取 WPF DataGrid 以将更改保存回数据库?

WPF DataGrid获取选择行的数据

WPF DataGrid如何分页、导出Excle、打印(急)