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,这可能吗?
干杯
您需要绑定到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>