WPF数据网格组合框列

5

你好,我正在使用WPF DataGrid,并尝试使ComboBox列正常工作。

<tk:DataGridComboBoxColumn Header="GroupLevel"
                           DisplayMemberPath="Type"
                           SelectedItemBinding="{Binding Path=GroupLevel}"
                           >
    <tk:DataGridComboBoxColumn.EditingElementStyle>
        <Style TargetType="ComboBox">
            <Setter Property="ItemsSource" Value="{Binding Path=GroupLevel.Group.GroupLevels}" />
        </Style>
    </tk:DataGridComboBoxColumn.EditingElementStyle>

</tk:DataGridComboBoxColumn>

当我查看网格时,列是空白的,就像它没有使用显示成员路径一样。但是一旦我点击该列,组合框就会出现,并显示我的ItemsSource中的所有项目并选择正确的项目,因此我知道绑定都正常工作,甚至包括DisplayMemberPath。只是当我不编辑单元格时,它显示为空白。
我错过了某个属性吗?
谢谢, Raul
1个回答

15

我相信这是因为当你不处于编辑模式时,你的列(Column)没有一个项目源(Items Source),而ComboBox在没有项目源的情况下无法有所选项。当你进入编辑模式时,你的列会获得它的项目源(Items Source),一切都很好。你可以通过像这样指定项目源(Items Source)来解决这个问题:

<tk:DataGridComboBoxColumn.ElementStyle>
    <Style TargetType="ComboBox">
        <Setter Property="ItemsSource" Value="{Binding Path=GroupLevel.Group.GroupLevels}" />
    </Style>
</tk:DataGridComboBoxColumn.ElementStyle>

那么您的编辑元素和非编辑元素都具有相同的ItemsSource。


你不会相信这个有多难找。我不知道非编辑模式下仍然有一个组合框。我以为它只是一个文本块。再次感谢! - HaxElit
1
是的,有点奇怪。我发现通过代码来处理datagrid确实可以让你掌握一些技巧。要查看的代码是DatagridComboColumn中的GenerateElement函数,它们有一个仅显示的组合框。我将datagrid源代码导入我的项目中,完成后再用直接的dll引用替换它。 - Aran Mulholland
3
你知道在视图模式下是否可以使comboBox可见吗?我希望我的用户知道那是一个ComboBox。 - MBen

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