如何使用WPF Toolkit Datagrid DataGridTemplateColumn和一个组合框?

时间:2009-11-16 22:13:08

标签: combobox wpftoolkit wpfdatagrid

我有一个看起来像这样的数据网格

<tk:DataGrid  ItemsSource="{Binding Parents}" AutoGenerateColumns="False">
                <tk:DataGrid.Columns>
                <tk:DataGridTextColumn  Header="Description" Binding="{Binding ID}" />

                <tk:DataGridTemplateColumn Header="Description" >
                    <tk:DataGridTemplateColumn.CellEditingTemplate>
                        <DataTemplate>
                            <TextBox Text="{Binding Path=Description, Mode=TwoWay}" />
                        </DataTemplate>
                    </tk:DataGridTemplateColumn.CellEditingTemplate>
                    <tk:DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding Path=Description}"/>
                        </DataTemplate>
                    </tk:DataGridTemplateColumn.CellTemplate>
                </tk:DataGridTemplateColumn>

                <tk:DataGridTemplateColumn Header="Child Description" >
                    <tk:DataGridTemplateColumn.CellEditingTemplate>
                        <DataTemplate>
                            <ComboBox  SelectedIndex="{Binding Path=ChildID}"  ItemsSource="{Binding Path=Children}" />
                        </DataTemplate>
                    </tk:DataGridTemplateColumn.CellEditingTemplate>
                    <tk:DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding Path=Children.Description}"/>
                        </DataTemplate>
                    </tk:DataGridTemplateColumn.CellTemplate>
                </tk:DataGridTemplateColumn>
            </tk:DataGrid.Columns>
        </tk:DataGrid>

视图绑定到一个ViewModel,它暴露了一个应该是我的行的Parent列表和一个应该是组合框下拉内容的Children列表。它的设置方式我获得了Parent的行,但是在Child Description列中没有数据。当我双击时,该行变得可编辑并且组合框显示出来。但没有数据。当我查看输出窗口时,我看到绑定错误说“BindingExpression路径错误:在'对象'''父级'上找不到'儿童'属性”。我知道......我如何告诉它查找一个级别?我已经尝试将datagrid绑定到viewmodel,但是没有显示任何行。我已经尝试过使用relativesource标记,我仍然无法看到我想要它看到的内容。我确定我的语法不正确。我找不到任何例子。我做错了什么?

1 个答案:

答案 0 :(得分:1)

可能有更聪明的方法来完成此任务,但我将使用的愚蠢,快速的方法是修改Parent对象以包含Children集合。这将使父和子的关系明确,您不必从上面更改您的xaml语法。

如果您不想将Children集合添加到Parent对象,则可以使用以下xaml绑定::

    ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, 
AncestorType={x:Type tk:DataGrid}}, 
Path=DataContext.Children}"