代码之家  ›  专栏  ›  技术社区  ›  nportelli

如何使用WPF工具包DataGrid DataGridTemplateColumn和ComboBox?

  •  0
  • nportelli  · 技术社区  · 15 年前

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

    <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,该视图显示一个父级列表(应该是我的行)和一个子级列表(应该是组合框下拉内容)。它的设置方式是获取父级的行,但子描述列中没有数据。当我双击该行时,该行将变为可编辑行并显示组合框。但没有数据。当我在输出窗口中查看时,我看到绑定错误说“bindingExpression路径错误:”在“对象”“父”上找不到“子”属性。我知道…我该怎么告诉它去查一级?我已经尝试将数据报绑定到视图模型,但没有显示任何行。我已经尝试使用RelativeSource标记,但仍然无法让它看到我想要它看到的内容。我确信我的语法不正确。我找不到任何例子。我做错什么了?

    1 回复  |  直到 13 年前
        1
  •  1
  •   Ed Gonzalez    15 年前

    可能有更聪明的方法来完成这个任务,但我会使用愚蠢、快速的方法修改父对象以包含子集合。这将使父级和子级的关系显式化,并且您不必从上面更改XAML语法。

    如果不想将子集合添加到父对象中,则可以使用以下XAML绑定::

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