【问题标题】:WPF - example with DataGridComboBoxColumnWPF - DataGridComboBoxColumn 示例
【发布时间】:2010-12-15 23:57:00
【问题描述】:
我有一个包含 2 列的数据网格。一列包含角色信息,另一列应该有一个包含可用用户列表的组合框。组合框中的数据与第一列中的数据无关。
组合框没有数据上下文,只有一个项目源,而且我似乎也无法使用绑定,这让我感到很困惑。
一个表格和组合框中的数据使用两个不同的数据集的方法是什么?
【问题讨论】:
-
@UnkownCoder,带有“can some point me to”等短语的问题可能会被识别为离题(请参阅on-topic)。
标签:
wpf
datagridcomboboxcolumn
【解决方案1】:
数据网格中的列没有数据上下文,因为它们从未添加到可视化树中。听起来有点奇怪,但看看vinces blog,它是视觉布局的一个很好的例子。绘制网格后,单元格具有数据上下文,您可以使用普通绑定(不是静态资源..)在其中设置组合框项目源。
您可以像这样访问组合框项目源
<dg:DataGridComboBoxColumn>
<dg:DataGridComboBoxColumn.EditingElementStyle>
<Style TargetType="ComboBox">
<Setter Property="ItemsSource" Value="{Binding Path=MyBindingPath}" />
</Style>
</dg:DataGridComboBoxColumn.EditingElementStyle>
</dg:DataGridComboBoxColumn>
看看here 和here 的一些代码
【解决方案2】:
不是使用DataGridTextColumn,而是使用DataGridComboBoxColumn。然后使用ItemsSource 填充数据,在下面的示例中,它指向静态资源中的外部enum,最后将结果绑定到目标对象,该目标对象将在SelectedItemBinding 中保存用户选择.
<DataGrid.Columns>
<DataGridComboBoxColumn Header="MySelections"
SelectedItemBinding="{Binding MySelectionsProperty}"
ItemsSource="{Binding Source={StaticResource mySelectionsEnum}}" />
</DataGrid.Columns>
在 DataGridComboBoxColumn Class 上查看 MSDN 上的完整示例