多对多(学生,班级示例)Datagrid xaml绑定

时间:2013-06-15 20:20:48

标签: wpf entity-framework xaml data-binding

我有一个WPF /实体框架应用程序, 我的模特有学生,班级实体 学生和班级之间存在多对多的关联/关系(学生可以有很多班级,班级有很多学生)

学生[身份证,姓名,班级(导航属性)] 课程[Id,Title,Students(Navigation property)

在这种情况下,实体框架不显示连接/关系表。

我有2个DataGirds作为主要细节,学生网格是主要的,类是细节

如何设置绑定到类gird(详细信息),以便我可以向选定的学生添加和删除类?

我想要的是从主网格中选择一个学生并添加或删除他的课程

这是我的课程网格

<DataGrid x:Name="classesDataGrid"
                      AutoGenerateColumns="False"
                      EnableRowVirtualization="True"
                      Height="200"
                      ItemsSource="{Binding Source={StaticResource studentClassesViewSource}}"
                      RowDetailsVisibilityMode="VisibleWhenSelected"
                      Width="380">
                <DataGrid.Columns>


                    <DataGridComboBoxColumn Header="Class Name From Combo"
                                            Width="*"

                                            ItemsSource="{Binding Source={StaticResource classViewSource}}" 
                                            DisplayMemberPath="Name"

                                            SelectedItemBinding="{Binding Students}" 

                                            />
                    <!--<DataGridTextColumn x:Name="durationColumn"
                                        Binding="{Binding Duration}"
                                        Header="Duration"
                                        Width="SizeToHeader" />-->

                </DataGrid.Columns>

当关系是一对多时,这种情况可以正常工作,但我无法使其适用于多对多的关系。

更多关于这篇文章 here

1 个答案:

答案 0 :(得分:0)

我不确定我的问题是否正确: 您想知道如何解决xaml中的主要细节绑定问题吗?

如果您有一个学生将课程集合作为导航属性,您只需为学生使用一个网格,例如:

<DataGrid x:Name="masterGrid"
          ItemsSource="{Binding Path=Students}" />

和另一个详细信息(您的类 - 反之亦然)并不重要: 在这种情况下,我会建议你一个元素名称绑定

<DataGrid x:Name="detailsGrid"
          DataContext="{Binding ElementName=masterGrid, Path=SelectedItem}"
          ItemsSource="{Binding Path=Classes}" />

希望有所帮助(至少在初次点火时)......