使用视图模型时,在填充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之前绘制的 - 这可能是对的吗?
无论如何,任何答案都将不胜感激
提前致谢 - 米克
答案 0 :(得分:1)
如果没有看到更多的代码,我的猜测就是内部网格没有填充,因为它没有绑定到你认为的那样。如果在调试程序时打开输出窗口,您是否看到任何绑定错误?它应该说如下: BindingExpression路径错误:'对象'上找不到'SelectedCompensationEvent.Correspondance'属性...
如果是这种情况,您需要告诉嵌套网格显式绑定到数据上下文中的对象。如果您不确定如何执行此操作,此链接可能会有所帮助:http://www.wintellect.com/blogs/sloscialo/where-s-my-datacontext