wpf嵌套数据网格没有填充

时间:2014-05-21 06:12:54

标签: c# wpf mvvm datagrid nested

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

我有两个类:CompensationEvent和Compensation Event Correspondence。 CompensationEvent包含List Correspondence的属性。 (我知道在代码中我拼写了对应错误 - 但这不是问题)

我希望我的主数据网格填充ComppensationEvents,并希望嵌套网格填充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之前绘制的 - 这可能是对的吗?

无论如何,任何答案都将不胜感激

提前致谢 - 米克

1 个答案:

答案 0 :(得分:1)

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

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