【问题标题】:WPF DataGrid how to get when ItemsSource updatesWPF DataGrid如何获取ItemsSource更新时
【发布时间】:2010-11-09 13:47:04
【问题描述】:

DataGrid 的源更新时会触发哪个事件?我已经尝试过 DataContextChanged 和 SourceUpdated 但它从未成功过。

其实我需要一个简单的东西。我想,如果有新行出现,将 GridView 的滚动条向下滚动到底部以查看它是什么。

【问题讨论】:

  • 当您说“当有新行进入时”是指底层数据源(数据库)还是 DataGrid 数据源?
  • 我的意思是 GridView 的 ItemsSource。

标签: wpf events datagridview wpf-controls wpfdatagrid


【解决方案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");
      }
      

      【讨论】:

        猜你喜欢
        • 2016-02-19
        • 2012-06-22
        • 2018-06-28
        • 1970-01-01
        • 2011-04-22
        • 2016-11-17
        • 2014-10-05
        • 1970-01-01
        • 2013-05-13
        相关资源
        最近更新 更多