[英]Event after DataGrid new DataContext
在我的WPF窗口中,我有DataGrid
。
DataGrid
从DataTable加载数据,如下所示:
gridData.DataContext = dataTable
一切正常, DataGrid
由数据表中的存储过程中的数据填充。 取决于数据的类型,DataGrid的列具有不同的宽度,我想在数据网格填充数据后获得此宽度。 我必须处理哪个事件? 我尝试了DataContextChanged
, Loaded
, AutoGenratedColumns
, SourceUpdated
,但是似乎所有这些都在DataGrid
填充数据之前被调用。
有什么办法吗?
您可以使用几种方法来捕捉DataGrid的ItemsSource更改的时刻:
使用DependencyPropertyDescriptor:
DependencyPropertyDescriptor itemsSourcePropertyDescriptor = DependencyPropertyDescriptor.FromProperty(ItemsControl.ItemsSourceProperty, typeof(DataGrid)); itemsSourcePropertyDescriptor.AddValueChanged(dataGrid1, OnDataGridItemsSourceChanged); private void OnDataGridItemsSourceChanged(object sender, EventArgs e) { }
创建一个DataGrid后代并重写OnItemsSourceChanged方法
有是无防弹方法DataGrid
不会引发任何“列中产生”事件,但你应该能够调用Dispatcher.Invoke
用DispatcherPriority
低于DispatcherPriority.Loaded
一旦DataGrid
已被加载,例如:
dataGrid.AutoGenerateColumns = true;
dataGrid.ItemsSource = new List<Item> { new Item() { Name = "some very long name..." } };
dataGrid.Loaded += (s, e) =>
{
dataGrid.Dispatcher.Invoke(new Action(() =>
{
MessageBox.Show(dataGrid.Columns[0].ActualWidth.ToString());
}), System.Windows.Threading.DispatcherPriority.Input);
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.