DataGridComboBoxColumn binding

本文关键字:binding DataGridComboBoxColumn | 更新日期: 2023-09-27 17:58:04

我在这里看到了一些帖子,人们对如何绑定到DataGridComboBoxColumn、感到困惑

我有

<DataGridComboBoxColumn SelectedItemBinding="{Binding Collection}"  DisplayMemberPath="Name" Header="Name" Width="70">

不起作用。。

所以我用了

<DataGridComboBoxColumn ItemBinding="{Binding Collection}" DisplayMemberPath="Name"> Header="Name" Width="70">

这同样不起作用,为什么绑定到数据网格管理器不同于原始的组合框。

<ComboBox ItemsSource="{Binding Collection}" DisplayMemberPath="Name" HorizontalAlignment="Left">

哪一个工作

绑定到DataGrid中的组合框的正确方法是什么?

---编辑---

我可能发现了问题,我有一个绑定到ItemSource的DataGrid,但是,我希望ComboBoxColumn绑定到另一个ItemSource,这可能吗?

干杯

DataGridComboBoxColumn binding

您需要绑定到ItemsSource属性。将其设置在EditingElementStyle中。

<DataGridComboBoxColumn>
    <DataGridComboBoxColumn.EditingElementStyle>
        <Style TargetType="ComboBox">
            <Setter Property="ItemsSource" Value="{Binding Collection}"/>
            <Setter Property="DisplayMemberPath" Value="Name"/>
        </Style>
    </DataGridComboBoxColumn.EditingElementStyle>
</DataGridComboBoxColumn>

如果您希望ItemsSource绑定到DataGrid基础源对象之外的集合,您也可以这样做。

假设集合AnotherCollection驻留在Window/UserControl的ViewModel中,则可以使用RelativeSource标记扩展与其绑定。

此外,您必须将SelectedItemBinding设置为要设置从ComboBox中选择的值的属性,并在DataGridComboBoxColumn的ElementStyle下声明相同的样式。假设要绑定的属性名称为Name

<DataGridComboBoxColumn SelectedItemBinding="{Binding Name}">
    <DataGridComboBoxColumn.EditingElementStyle>
        <Style TargetType="ComboBox">
            <Setter Property="ItemsSource"
                    Value="{Binding DataContext.AnotherCollection,
                               RelativeSource={RelativeSource Mode=FindAncestor, 
                                                         AncestorType=Window}}"/>
            <Setter Property="DisplayMemberPath" Value="Name"/>
        </Style>
    </DataGridComboBoxColumn.EditingElementStyle>
    <DataGridComboBoxColumn.ElementStyle>
        <Style TargetType="ComboBox">
            <Setter Property="ItemsSource"
                    Value="{Binding DataContext.AnotherCollection,
                              RelativeSource={RelativeSource Mode=FindAncestor, 
                                                         AncestorType=Window}}"/>
            <Setter Property="DisplayMemberPath" Value="Name"/>
        </Style>
    </DataGridComboBoxColumn.ElementStyle>
</DataGridComboBoxColumn>