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 不是从FrameworkElementFrameworkContentElement 派生的,因此它不在可视树中,也没有DataContext,这就是您的绑定失败的原因。

如果您要绑定的List&lt;int&gt; 对于每个项目都相同,那么也许您应该找到另一种方法来绑定它,也许您可​​以将其设为静态并在绑定中使用StaticResource

无论如何,要将ItemsSource 绑定到源类中的List&lt;int&gt; 属性,您可以使用ElementStyleElementEditingStyle(正如其他人所指出的那样)。以下应该工作

<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 设为静态,我该如何绑定它?你能给我举个例子吗? @Night Walker:我现在不在电脑前,但请查看以下链接:***.com/questions/936304/… 现在我认为更深层次的静态对我没有帮助,因为我需要在组合框中获取选定的项目,如果我也开始对这些项目使用静态,我会遇到问题。 @Night Walker:这不是问题。 ComboBoxes 将共享 ItemsSource,但它们将拥有单独的 SelectedItems,以便该部分已经为您工作。您的 SelectedItemBinding 可以保持原样 谢谢你的例子真的很有帮助,解决了我的问题。您能否还添加一个静态绑定示例。我已经尝试过,但在我的情况下它不是那么有效,但可能我做错了什么(对 xaml 来说太新了)【参考方案2】:

您不应该在样式中设置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 定义数据模板。

【讨论】:

我已经尝试过 我仍然看到空的组合框。其他具有 DataGridTextColumn 绑定的列工作正常。 你可以试试 TemplateColumn 吗? 我得到的是空的组合框,没有我在那里添加的值。

以上是关于DataGridComboBoxColumn 数据绑定的主要内容,如果未能解决你的问题,请参考以下文章

C# 使用数据表在绑定数据网格上的 DataGridComboBoxColumn 上设置值

使用整数字段和枚举作为显示名称填充 DataGridComboBoxColumn

在后面的代码中动态绑定 DataGridComboBoxColumn

仅在编辑模式下显示静态列表的 WPF DataGridComboboxColumn

DataGridComboBoxColumn绑定到DataGrid ItemsSource的不同列表

如何创建简单的 DataGridComboboxColumn?