DataGridComboBoxColumn 数据绑定
Posted
技术标签:
【中文标题】DataGridComboBoxColumn 数据绑定【英文标题】:DataGridComboBoxColumn data binding 【发布时间】:2011-10-26 09:21:06 【问题描述】:我正在尝试数据绑定DataGridComboBoxColumn
<DataGridComboBoxColumn Header="Number of Copies" SelectedItemBinding="Binding NumberCopies">
<DataGridComboBoxColumn.ElementStyle>
<Style TargetType="ComboBox">
<Setter Property="ItemsSource" Value="Binding LifeAreaList"/>
<Setter Property="IsReadOnly" Value="True"/>
</Style>
</DataGridComboBoxColumn.ElementStyle>
</DataGridComboBoxColumn>
我在这里做错了什么,因为我在运行时得到了一个空的组合框。
我关注了
System.Windows.Data 错误:2:找不到目标元素的管理 FrameworkElement 或 FrameworkContentElement。绑定表达式:路径=LifeAreaList;数据项=空;目标元素是“DataGridComboBoxColumn”(HashCode=49475561);目标属性是“ItemsSource”(类型“IEnumerable”)
【问题讨论】:
运行时输出窗口会报什么错误? 【参考方案1】:DataGridColumn
不是从FrameworkElement
或FrameworkContentElement
派生的,因此它不在可视树中,也没有DataContext
,这就是您的绑定失败的原因。
如果您要绑定的List<int>
对于每个项目都相同,那么也许您应该找到另一种方法来绑定它,也许您可以将其设为静态并在绑定中使用StaticResource
。
无论如何,要将ItemsSource
绑定到源类中的List<int>
属性,您可以使用ElementStyle
和ElementEditingStyle
(正如其他人所指出的那样)。以下应该工作
<DataGridComboBoxColumn Header="Number of Copies"
SelectedItemBinding="Binding ListAreaItem">
<DataGridComboBoxColumn.ElementStyle>
<Style TargetType="ComboBox">
<Setter Property="ItemsSource" Value="Binding LifeAreaList"/>
</Style>
</DataGridComboBoxColumn.ElementStyle>
<DataGridComboBoxColumn.EditingElementStyle>
<Style TargetType="ComboBox">
<Setter Property="ItemsSource" Value="Binding LifeAreaList"/>
</Style>
</DataGridComboBoxColumn.EditingElementStyle>
</DataGridComboBoxColumn>
【讨论】:
,感谢您的回答,看起来很有趣。如果我将我的 List您不应该在样式中设置ItemsSource
,列本身has such a property 可能会覆盖您可能尝试在样式中设置的任何内容。此外,您尝试将其设置为错误的样式(该样式用于显示模式),您可以尝试将其设置为 EditingElementStyle
,但我也不建议这样做。
【讨论】:
【参考方案3】:我会尝试使用 PresentationTraceSources.TraceLevel="High" 的常规 DataGridColumn,看看您是否遇到绑定问题。
【讨论】:
【参考方案4】:为什么要在样式中设置 Items 源?
你能试试这个代码吗:
<my:DataGridTemplateColumn Header="Number of Copies" >
<my:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox ItemsSource="Binding Path=LifeAreaList" >
<ComboBox.ItemTemplate>
<DataTemplate>
<Label Content="Binding ."></Label>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
</DataTemplate>
</my:DataGridTemplateColumn.CellTemplate>
</my:DataGridTemplateColumn>
如果 LifeAreaList 是复杂的类集合并且您希望以自定义方式显示它,则为 DataGridTemplateColumn 定义数据模板。
【讨论】:
我已经尝试过以上是关于DataGridComboBoxColumn 数据绑定的主要内容,如果未能解决你的问题,请参考以下文章
C# 使用数据表在绑定数据网格上的 DataGridComboBoxColumn 上设置值
使用整数字段和枚举作为显示名称填充 DataGridComboBoxColumn
在后面的代码中动态绑定 DataGridComboBoxColumn
仅在编辑模式下显示静态列表的 WPF DataGridComboboxColumn