【问题标题】:DataGrid - event after all columns have been created?DataGrid - 创建所有列后的事件?
【发布时间】:2012-01-18 09:22:32
【问题描述】:

似乎我正在尝试做一些简单的事情,我有一种奇怪的感觉,我正在使用一些非常奇怪的方法来实现这一点。

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

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

目前我正在使用LayoutUpdated 事件并检查列数是否为应有的值。这行得通,但我无法摆脱这是一个丑陋的解决方法的感觉。

DataGrid 创建完所有列后,有什么更好的方法吗?

【问题讨论】:

  • DataGrid.Loaded 仅在对象首次加载时出现,不是吗?当我刷新或更改数据时,我想再次调用该事件(因为我需要重新同步所有网格)。
  • 啊,是的..从阅读文档来看,目前看来 LayoutUpdated 是您的最佳选择。

标签: c#-4.0 silverlight-4.0 datagrid


【解决方案1】:

我最终使用了 LayoutUpdate……很遗憾,但确实如此。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 正如我在问题中所写的,这些列是在 AutoGeneratingColumn 事件之一上创建的。因此,它们在分配 ItemSource 后不可见。
    • 所以您分配了ItemsSource... 分配时您已注册AutoGeneratingColumn 事件以添加其他列?事件将阻塞,直到所有处理程序都被处理......所以你应该没事。
    • 我不太明白你的评论。 AutoGeneratingColumn 事件在分配ItemSource 之前注册。必须如此,否则我将无法生成那些额外的列(除非我在完全不同的时刻这样做,并完全废弃 AutoGeneratingColumn)。如果我遵循代码的工作方式,则在分配 ItemSource 并且当前方法完成后触发事件。
    • 我的意思是...您注册参加活动。之后,您设置 ItemsSource。在每个自动生成的列中,都会触发 AutoGeneratingColumn。然后,您添加某种类型的另一列。最终,您想要调整所有列的大小。在设置 ItemsSource 期间,触发的事件是阻塞的。因此,在完成之前,您的代码不会继续到下一个条目。可以在设置 ItemsSource 后立即进行后处理(调整大小)
    猜你喜欢
    • 2011-07-22
    • 1970-01-01
    • 2019-07-15
    • 1970-01-01
    • 2011-07-06
    • 1970-01-01
    • 2016-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多