更改ItemsSource后的组合框性能

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

<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行,并且在其他地方建议使用虚拟化存储区没有区别。 显示它的数据网格大约有10行,所以它甚至不会接近任何需要混洗的大量数据。

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

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


问题出在VS调试器上。 由于某种原因,组合框令人难以忍受。


那么,解决它?

当更新QualityInfoAssortmentCollection事件触发了上面的组合框时,需要5-7秒才能尝试进入下拉菜单。

它在哪里花时间? 这不像是没有探测器。 这是完全可能的,这是WPF相关的,在这种情况下这个链接:

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

也可以让你使用WPF级别分析器(也就是说你可以看到WPF在哪里花费时间,这在某些WPF定义中可能会出错)。

也可能发送太多不可感知的更新事件(您应始终在发送更新通知之前更改值HAS vchanged)。 所以,upate可能会更新一个属性来触发另一个更新。 分析器可以让你找到这些事件。

这里没有人可以帮助你 - 没有代码等。但是一个分析器应该使它在时间耗尽的地方显得很明显。

链接地址: http://www.djcxy.com/p/41261.html

上一篇: Combobox performance after changing ItemsSource

下一篇: Silverlight ComboBox force reselect SelectedItem