DataGrid comboBoxItems表现得很奇怪

时间:2018-06-15 14:33:58

标签: wpf combobox wpfdatagrid

我有一个DataGrid,其中包含以下模板

<DataGridTemplateColumn Header="Priority" Width="60" >
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <ComboBox x:Name="comboPriority" SelectionChanged="DataGridComboBoxSelectionChanged" FontWeight="Bold" Loaded="comboPriority_Loaded">
                <ComboBoxItem Background="Red">
                    <Label Background="Red" HorizontalContentAlignment="Center" Width="40">A</Label>
                </ComboBoxItem>
                <ComboBoxItem Background="#FFFFC000">
                    <Label Background="#FFFFC000" HorizontalContentAlignment="Center" Width="40">B</Label>
                </ComboBoxItem>
                <ComboBoxItem Background="Yellow">
                    <Label Background="Yellow" HorizontalContentAlignment="Center" Width="40">C</Label>
                </ComboBoxItem>
                <ComboBoxItem Background="#FF92D050">
                    <Label Background="#FF92D050" HorizontalContentAlignment="Center" Width="40">D</Label>
                </ComboBoxItem>
                <ComboBoxItem Background="#FF00B0F0">
                    <Label Background="#FF00B0F0" HorizontalContentAlignment="Center" Width="40">E</Label>
                </ComboBoxItem>
                <ComboBoxItem Background="#FFB1A0C7">
                    <Label Background="#FFB1A0C7" HorizontalContentAlignment="Center" Width="40">F </Label>
                </ComboBoxItem>
                <ComboBoxItem Background="#FFFF3399">
                    <Label Background="#FFFF3399" HorizontalContentAlignment="Center" Width="40">G</Label>
                </ComboBoxItem>
            </ComboBox>
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

我可以选择一个选项,将其保存到数据库并在初始加载时正确查看所选值。但是,在我滚动时,所选值会在其他行上多次显示/消失。

举个例子。如果我从第一行ComboBox中选择一个值,我会在DataGrid中多次看到该值。

我尝试在下拉选择后立即刷新网格,但DataGrid表现相同。

1 个答案:

答案 0 :(得分:1)

这是因为UI虚拟化。您可以将VirtualizingPanel.IsVirtualizing附加属性设置为false

来禁用它
<DataGrid ... VirtualizingPanel.IsVirtualizing="False">

请注意,这可能会对滚动性能产生负面影响。

解决此问题的最佳方法是将SelectedItem的{​​{1}}属性绑定到您使用ComboBox填充的数据对象类型的属性。