我是 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/