我有3张 table :
Item - 这是 DataContext - 它有一个导航列 Group
组 - 有一个导航栏类别。

我想在 DataGrid 中有两个(类别和组)列,当我选择一个类别时,它应该只显示在组列中的 Category.Groups。

这是我正在处理的代码:

<tk:DataGrid AutoGenerateColumns="False" ItemsSource="{Binding}">
    <tk:DataGrid.Columns>

        <!--Works-->
        <tk:DataGridComboBoxColumn
            Header="Categroy"
            DisplayMemberPath="Title"
            SelectedValuePath="CategoryId"
            SelectedValueBinding="{Binding Group.Category.CategoryId}"
            ItemsSource="{Binding Context.Categories,
                Source={x:Static Application.Current}}"
        />


        <!--Look at these two things:-->

        <!--This does work-->
        <tk:DataGridTemplateColumn>
            <tk:DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <ItemsControl
                        ItemsSource="{Binding Group.Category.Groups}">
                        <ItemsControl.ItemTemplate>
                            <DataTemplate DataType="{x:Type data:Group}">
                                <TextBlock Text="{Binding Title}"/>
                            </DataTemplate>
                        </ItemsControl.ItemTemplate>
                    </ItemsControl>
                </DataTemplate>
            </tk:DataGridTemplateColumn.CellTemplate>
        </tk:DataGridTemplateColumn>

        <!--But this does NOT work, even it's the same source-->
        <!--Notice I even tried a dummy converter and doesnt reach there-->
        <tk:DataGridComboBoxColumn
            Header="Group"
            DisplayMemberPath="Title"
            SelectedValuePath="GroupId"
            ItemsSource="{Binding Group.Category.Groups,
                Converter={StaticResource DummyConverter}}"
            SelectedValueBinding="{Binding Group.GroupId}"
            />

    </tk:DataGrid.Columns>
</tk:DataGrid>

更新
你会说问题是 ItemsSource 属性不能设置为非静态绑定(bind)吗?
我怀疑是因为即使我将 ItemsSource 设置为 {Binding}DummyConverter 它也不会在转换器中停止;在 Category ComboBox 中它工作正常。

最佳答案

数据网格中的列没有数据上下文,因为它们永远不会添加到可视化树中。听起来有点奇怪,但看看 vince's blog ,它有一个很好的视觉布局示例。绘制网格后,单元格具有数据上下文,您可以使用普通绑定(bind)(不是静态资源..)在其中设置组合框项目源

您可以像这样访问组合框项目源:

<dg:DataGridComboBoxColumn>
   <dg:DataGridComboBoxColumn.EditingElementStyle>
      <Style TargetType="ComboBox">
         <Setter Property="ItemsSource" Value="{Binding Path=MyBindingPath}" />
      </Style>
   </dg:DataGridComboBoxColumn.EditingElementStyle>
</dg:DataGridComboBoxColumn>

看看 herehere 一些代码。您还需要 设置非编辑元素 的项目源,如此 post

关于wpf - 问题绑定(bind) DataGridComboBoxColumn.ItemsSource,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1724180/

10-17 01:54