首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WPF DataGrid RowDetails -将内部DataGrid绑定到外部DataGrid的父DataRow

WPF DataGrid RowDetails -将内部DataGrid绑定到外部DataGrid的父DataRow
EN

Stack Overflow用户
提问于 2016-07-03 08:45:00
回答 1查看 884关注 0票数 1

我有以下DataGrid:

代码语言:javascript
复制
    <DataGrid x:Name="dgOuter" 
              ItemsSource="{Binding}" AutoGenerateColumns="false">
        <DataGrid.RowDetailsTemplate>
            <DataTemplate>
                <StackPanel Orientation="Vertical">
                    <DataGrid ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGridRow}}}"
                        AutoGenerateColumns="false">
                        <DataGridTextColumn Header="ID" Binding="{Binding ID.oldValue}" />
                        <DataGridTextColumn Header="Name" Binding="{Binding Name.oldValue}" />
                        <DataGridTextColumn Header="Gender" Binding="{Binding Gender.oldValue}" />
                    </DataGrid>
                </StackPanel>
            </DataTemplate>
        </DataGrid.RowDetailsTemplate>            
        <DataGrid.Columns>
            <DataGridTextColumn Header="ID" Binding="{Binding ID.newValue}" />
            <DataGridTextColumn Header="Name" Binding="{Binding Name.newValue}" />
            <DataGridTextColumn Header="Gender" Binding="{Binding Gender.newValue}" />
        </DataGrid.Columns>
    </DataGrid>

外部数据网格的DataContext是一个包含ID、名称和性别属性的对象列表。这些也是包含oldValue和newValue的对象。

目标: RowDetails应该显示与所选行完全相同的行,但是显示的是newValue而不是oldValue。

问题:我不知道如何指向选定行的DataBound项。

我已经使用TextBoxes而不是新的内部DataGrid实现了这一点,但是这确实是很多代码。

内部DataGrid的正确绑定是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-03 11:42:09

内部DataGrid的绑定不起作用,因为ItemSource应该绑定到集合。可以使用转换器将SelectedItem包装在集合中(例如,列表)。

代码语言:javascript
复制
<DataGrid ItemsSource="{Binding}" AutoGenerateColumns="False">
    <DataGrid.Resources>
        <local:ToCollectionConverter x:Key="ToCollectionConverter" />
    </DataGrid.Resources>
    <DataGrid.Columns>
        <DataGridTextColumn Header="ID" Binding="{Binding ID.newValue}" />
        <DataGridTextColumn Header="Name" Binding="{Binding Name.newValue}" />
        <DataGridTextColumn Header="Gender" Binding="{Binding Gender.newValue}" />
    </DataGrid.Columns>
    <DataGrid.RowDetailsTemplate>
        <DataTemplate>
            <DataGrid ItemsSource="{Binding Converter={StaticResource ToCollectionConverter}}"     
                      AutoGenerateColumns="False"
                      HeadersVisibility="None"
                      >
                <DataGrid.Columns>
                    <DataGridTextColumn Header="ID" Binding="{Binding ID.oldValue}" />
                    <DataGridTextColumn Header="Name" Binding="{Binding Name.oldValue}" />
                    <DataGridTextColumn Header="Gender" Binding="{Binding Gender.oldValue}" />
                </DataGrid.Columns>
            </DataGrid>
        </DataTemplate>
    </DataGrid.RowDetailsTemplate>
</DataGrid>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38168242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档