2012-01-18 44 views
0

看来我试图做一些简单的事情,我有这种奇怪的感觉,我正在使用一些非常奇怪的方法来实现这一点。DataGrid - 所有列创建后的事件?

我有几个Silverlight DataGrid对象与大量的自定义生成的列。这些列是在AutogenerateColumn事件之一中生成的。所有的列生成并显示后,我想同步它们的宽度和顺序(换句话说,我创建了几个“链接”的网格,它们以非常相似的方式显示不同的数据)。

我正面临的问题? DataGrid似乎没有在加载所有数据并绘制列后触发的事件。

我暂时使用LayoutUpdated事件并检查列计数是否应该是。这有效,但我不能动摇这是一个丑陋的解决方法的感觉。

只要DataGrid创建了所有列,是否有更好的方法来完成任务?

+0

[DataGrid.Loaded](http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.loaded(v = vs.95).aspx)? – Prescott 2012-01-18 09:29:16

+0

'DataGrid.Loaded'仅在对象第一次加载时才会发生,不是吗?当我刷新或更改数据时,我想再次调用该事件(因为我需要重新同步所有网格)。 – Shaamaan 2012-01-18 14:34:33

+0

啊,是的。从阅读文档看来,LayoutUpdated似乎是您目前最好的选择。 – Prescott 2012-01-18 15:44:12

回答

0

我结束了使用LayoutUpdate ...悲伤,但它是。

0

假设您对所有列进行了手动编辑,您可以在分配itemSource后调用方法,因为列的更新在设置后发生。

+0

正如我在问题中所写的,这些列是在'AutoGeneratingColumn'事件之一上创建的。因此,它们在分配'ItemSource'后不可见。 – Shaamaan 2012-01-18 14:31:12

+0

所以你分配'ItemsSource' ...当它分配你已经注册了'AutoGeneratingColumn'事件来添加额外的列?事件将被阻止,直到所有处理程序都被处理完毕...所以你应该没问题。 – ferdyh 2012-01-18 15:42:26

+0

我不太了解你的评论。 'AutoGeneratingColumn'事件在分配'ItemSource'之前注册。它必须是,否则我将无法生成这些额外的列(除非我在完全不同的时刻完成这项工作,并将'AutoGeneratingColumn'完全取消)。如果我按照代码的工作方式进行操作,那么在'ItemSource'已被分配并且当前方法已经完成之后,事件被触发。 – Shaamaan 2012-01-20 12:48:48