WPF数据表格中的组合框列性能问题

4

我有一个包含数据网格的WPF表单。 数据网格中的1个列是组合框类型。 组合框的ItemsSource属性中有数千个项目。 因此,当单击组合框旁边的箭头(我认为是渲染问题)时,显示值需要相当长的时间。 我们如何使组合框以几乎没有延迟的方式更快地显示项目?


顺便说一句,我会质疑一个设计,其中用户必须滚动浏览数千个项目才能选择单个项目,特别是如果它本身是众多项目之一(因为我假设你正在使用数据网格)。 - Wonko the Sane
1个回答

7

尝试将此代码放入您的下拉框中。与一次性加载所有项目不同,这样可以在查看时逐个加载它们。

对于数据表格中的下拉框,我总是使用DataGridTemplateColumn:

 <DataGridTemplateColumn Header="My Combo Column">
       <DataGridTemplateColumn.CellTemplate>
            <DataTemplate>
                 <ComboBox Margin="0" ItemsSource="{Binding Path=DataContext.MyCollection, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}}"
                   SelectedItem="{Binding Path=Item.Property, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" >
                        <ComboBox.ItemsPanel>
                             <ItemsPanelTemplate>
                                  <VirtualizingStackPanel Width=250 VirtualizingStackPanel.VirtualizationMode="Recycling" CanHorizontallyScroll="True"/>
                             </ItemsPanelTemplate>
                        </ComboBox.ItemsPanel>
                 </ComboBox>
            </DataTemplate>
        </DataGridTemplateColumn.CellTemplate>
 </DataGridTemplateColumn>  

给出的答案适用于组合框,但不适用于数据网格中的单元格类型为组合框的情况。如果使用的控件是WPF组合框控件,则可以使用。我正在寻找的是数据网格中单元格类型为组合框的情况。 - RohanDsouza
1
@Rohan - 你可以在DataGridComboBoxColumn的样式中设置ItemsPanel来使其正常工作。 - Peter Hansen
如果您使用DataGridTemplateColumn并将其DataTemplate更改为ComboBox,则可以使用我提供的示例。我会在我的答案中更新它的XAML。 - emybob
谢谢,这将会非常有帮助。 - RohanDsouza

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接