【问题标题】:DataGridComboBoxColumn bindingDataGridComboBoxColumn 绑定
【发布时间】:2014-04-13 18:25:43
【问题描述】:

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

我有

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

这没用..

所以我用了

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

这同样不起作用,为什么绑定到与原始组合框不同的 datagridcombo。

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

确实有效

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

---编辑---

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

干杯

【问题讨论】:

标签: c# wpf datagrid


【解决方案1】:

您需要绑定到 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>

【讨论】:

  • 谢谢这似乎有效,但是,当我从组合框中选择一个值时,当我点击它时它消失了,这是上面代码的正常行为吗?
  • 您需要将SelectedItemBinding添加到您要为其设置值的属性名称中,并且还需要在ElementStyle下添加相同的样式。让我用它来更新答案。
  • 谢谢,组合框现在有选定的项目,但它使网格崩溃! (!出现在行上)我想这是 itemsource 抱怨而不是 XAML 代码错误?
  • 当我从组合框中选择一个项目时,我会尝试单击它并单击 !出现在行的一侧并且行崩溃(我无法添加/编辑等)
  • 您的代码中似乎进行了某种验证。上述 XAML 不是问题。
猜你喜欢
  • 2013-04-24
  • 1970-01-01
  • 1970-01-01
  • 2013-04-24
  • 2012-01-03
  • 2011-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多