wpf嵌套数据网格不填充

本文关键字:填充 网格 数据网 嵌套 数据 wpf | 更新日期: 2023-09-27 18:04:16

在使用视图模型时,我在wpf中填充嵌套数据网格时遇到问题:

我有两个类:CompensationEvent和CompensationEvent Correspondence。CompensationEvent包含List Correspondence的属性。(我知道在代码中我拼写通信错误-这不是问题,虽然)

我希望主数据网格填充compensationevents,嵌套网格填充SelectedCompensationEvent属性的对应。

这是我的xaml(只显示相关的部分):

        <DataGrid x:Name="objDataGrid" Grid.Row="2" Grid.ColumnSpan="2" Margin="5" AutoGenerateColumns="False" CanUserAddRows="False" SelectedItem="{Binding Path=SelectedCompensationEvent}"
                  ItemsSource="{Binding Path=CompensationEvents}">
            <DataGrid.Columns>
                <DataGridTextColumn Header="Project" Binding="{Binding Path=Project}"/>
                <DataGridTextColumn Header="Title" Binding="{Binding Path=Title}"/>
                <DataGridTextColumn Header="Commments" Binding="{Binding Path=Comment}"/>
                <DataGridTextColumn Header="Date Raised" Binding="{Binding Path=DateRaised}"/>
            </DataGrid.Columns>
            <DataGrid.RowDetailsTemplate>
                <DataTemplate>
                    <DataGrid Height ="100" AutoGenerateColumns="False" ItemsSource="{Binding Path=SelectedCompensationEvent.Correspondance}" CanUserAddRows="False">
                        <DataGrid.Columns>
                            <DataGridTextColumn Header="Correspondance Type"  Binding="{Binding Path=CorrespondanceTypeID.Heading}" Width="*"/>
                            <DataGridTextColumn Header ="Issued By" Binding="{Binding Path=CorrespondanceTypeID.IssuedBy.PartyName}" Width="*"/>
                            <DataGridTextColumn Header ="Date Issued" Binding="{Binding Path=DateIssued}" Width="*"/>
                        </DataGrid.Columns>
                    </DataGrid>
                </DataTemplate>
            </DataGrid.RowDetailsTemplate>
        </DataGrid>
        <DataGrid  Grid.ColumnSpan="2"  Margin="5" Grid.Row ="4" Height ="100" AutoGenerateColumns="False" ItemsSource="{Binding Path=SelectedCompensationEvent.Correspondance}" CanUserAddRows="False">
            <DataGrid.Columns>
                <DataGridTextColumn Header="Correspondance Type"  Binding="{Binding Path=CorrespondanceTypeID.Heading}" Width="*"/>
                <DataGridTextColumn Header ="Issued By" Binding="{Binding Path=CorrespondanceTypeID.IssuedBy.PartyName}" Width="*"/>
                <DataGridTextColumn Header ="Date Issued" Binding="{Binding Path=DateIssued}" Width="*"/>
            </DataGrid.Columns>
        </DataGrid>

可以看到,在行详细信息模板中有两个网格和一个嵌套网格。第二个网格(在代码的末尾)和嵌套网格的定义完全相同。

当我运行应用程序并填充CompensationEvents属性时,第一个(外部)网格填充得很好,很满意。

当我在外部网格中选择一行,从而填充SelectedCompensationEvent时,较低的网格填充所有通信,因此我知道我的视图模型正在工作。然而,嵌套的网格仍然顽固地为空。

我能想到的唯一的事情是,嵌套的网格绘制之前SelectedCompensationEvent是在选择一行填充-这可能是正确的吗?

无论如何,任何答案都将是感激的

谢谢你-米克

wpf嵌套数据网格不填充

在没有看到更多代码的情况下,我的猜测是内部网格没有填充,因为它没有绑定到您认为它是什么。如果在调试程序时打开输出窗口,您是否看到任何绑定错误?它应该这样说:BindingExpression路径错误:'SelectedCompensationEvent。在"对象"上找不到对应属性…

如果是这种情况,则需要告诉嵌套网格显式绑定到数据上下文中的对象。如果你不确定怎么做,这个链接可能会有所帮助:http://www.wintellect.com/blogs/sloscialo/where-s-my-datacontext