【问题标题】:Combobox performance after changing ItemsSource更改 ItemsSource 后的组合框性能
【发布时间】:2011-12-23 09:19:43
【问题描述】:

我有一个数据网格,其中有一列组合框定义如下:

<DataGridTemplateColumn x:Name="AssortmentQualitySettingsDataGridColumn" Header="Kvaliteter">
<DataGridTemplateColumn.CellTemplate>
    <DataTemplate>
        <ComboBox ItemsSource="{Binding Path=QualityInfoAssortmentCollection}">
            <ComboBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                        <CheckBox IsChecked="{Binding Path=ActiveQuality}"></CheckBox>
                        <TextBlock Text="{Binding Path=QualityName}" IsEnabled="False"></TextBlock>
                    </StackPanel>
                </DataTemplate>
            </ComboBox.ItemTemplate>
        </ComboBox>
    </DataTemplate>
</DataGridTemplateColumn.CellTemplate>

ItemsSource 是一个 ObservableCollection 对象。然而,组合框中的文本框的文本在另一个数据网格中是可编辑的,并且可以放入另一个名为 QualityItemCollection 的 ObservableCollection 中,并且为了更新上面网格中的组合框,我在数据网格上有一个事件,该事件在该集合更改时触发。这甚至会导致 QualityInfoAssortmentCollection 被重新读取(组合框也需要重新设置,因此需要进行一些循环才能使其正常工作)。

现在,第一次加载数据时会发生什么,一切都很好,但当更新 QualityInfoAssortmentCollection 的事件触发时,上面的组合框在尝试进入它时需要 5-7 秒才能下拉。我已经计时了刷新本身,它只需不到十分之一秒即可完成。组合框的行数不超过 8-10 行,尝试使用其他地方建议的 virtualizingstackpanel 没有区别。显示它的数据网格大约有 10 行,因此它甚至不会接近任何需要洗牌的大量数据。

编辑:关于无法使用定义 QualityItemCollection 的更多解释。上述数据网格中的所有项目的 QualityItemColletion 都是相同的,但有关应选中哪些复选框的信息是在上述网格中的每个项目中设置的。因此,我将 QualityItemCollection 的副本复制到 QualityItemAssortmentCollection 中,该复选框也有一个布尔值。可能有更好的方法来做到这一点?

编辑 2: 现在尝试了 WPF 分析器,它就像程序一样锁定,并且在程序执行奇怪的事情期间不显示任何内容。但是,它变成了 Visual Studio 所做的事情,因为如果我单独运行程序而不是通过 Visual Studio 运行程序,则不会有延迟。耶。

【问题讨论】:

  • 我没有得到这个...The texts for the textbox in the combobox is however editable in another datagrid, and to get the comboboxes in the grid above updated I have an event on the datagrid that fires when that collection is changed. ...如果集合是可观察的,那么为什么你不能修改它。我无法理解你所说的那个事件的目的。
  • 试图解释得更好一点。

标签: wpf performance datagrid combobox


【解决方案1】:

问题出在 VS 调试器上。出于某种原因,它使组合框变得异常缓慢。

【讨论】:

  • 我也有这个问题。我花了几个小时试图找出问题所在。非常感谢。但是您是否偶然发现了 VS 调试器中正在执行的操作?
【解决方案2】:

那么,修复它?

当更新 QualityInfoAssortmentCollection 的事件触发上述组合框时,需要 5-7 尝试进入它时会下降几秒钟。

它把时间花在什么地方?它不像周围没有分析器。这完全有可能与 WPF 相关,在这种情况下,此链接:

http://msdn.microsoft.com/en-us/library/aa969767.aspx

还可以让您开始使用 WPF 级别分析器(即,您可以看到 WPF 花费时间的地方,这可能是某些 WPF 定义中的一些错误)。

也有可能你发送了太多不合理的更新事件(你应该总是在发送更新通知之前改变一个值是否已经改变)。因此,更新可能会将属性更新为相同的值,从而触发另一个更新。分析器将允许您找到这些事件。

这里没有人可以帮助你 - 没有代码等。但是分析器应该让时间花在哪里很明显。

【讨论】:

  • 感谢分析器上的链接。该用户击败了断点和时钟。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-16
  • 2021-07-27
  • 1970-01-01
  • 2016-06-12
  • 2012-11-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多