c# - DataGrid.ItemsSource 更改时如何引发事件

标签 c# wpf events datagrid

我是 WPF 的新手,我正在使用 DataGrids,我需要知道属性 ItemsSource 何时更改。

例如,我需要在执行此指令时引发一个事件:

dataGrid.ItemsSource = table.DefaultView;

或者添加一行时。

我试过使用这段代码:

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

但此代码仅在用户向集合中添加新行时才有效。因此,我需要一个在整个 ItemsSource 属性发生任何更改时引发的事件,无论是因为整个集合被替换还是因为添加了一行。

我希望你能帮助我。提前谢谢你

最佳答案

ItemsSource 是一个依赖属性,因此当属性更改为其他内容时很容易收到通知。除了您拥有的代码之外,您还想使用它,而不是:

Window.Loaded(或类似的)中,您可以像这样订阅:

var dpd = DependencyPropertyDescriptor.FromProperty(ItemsControl.ItemsSourceProperty, typeof(DataGrid));
if (dpd != null)
{
    dpd.AddValueChanged(myGrid, ThisIsCalledWhenPropertyIsChanged);
}

并有一个更改处理程序:

private void ThisIsCalledWhenPropertyIsChanged(object sender, EventArgs e)
{
}

只要设置了 ItemsSource 属性,就会调用 ThisIsCalledWhenPropertyIsChanged 方法。

您可以将此用于您希望收到更改通知的任何依赖属性。

关于c# - DataGrid.ItemsSource 更改时如何引发事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10708806/

相关文章:

c# - 确定 EnvDTE.Project 是否可用

javascript - AddEventListener 和图像加载器问题

javascript - 在 jquery ui 模式对话框中停止并稍后执行 javascript 事件

c# - 使用 sql 数据库部署 wpf 应用程序

wpf - WPF 多线程如何工作?

wpf - 使用 WPF 和 F# 嵌入应用程序图标

Javascript onkeypress 事件触发但输入的文本值不正确

通过命名空间重用 C# 代码

c# - 使用 LINQ 从数据库中检索树结构

c# - 我需要开发人员 token 才能从 Adwords 获取数据吗