::编辑注意事项::
我完全重写了这个问题,这是简化的标题(我的实体集名称和属性比这个类似的场景更难以遵循)。
:: / EDIT note ::
我一直在努力找到我能够看到的“缺少导航链接”并从DataGridComboBoxColumn保存回我的实体Context
。
我的实体设置:
我的视图:绑定到“类”实体集的DataGrid。
它有两列:
- DataGridComboBoxColumn(显示每个类的InstructorNames)
- DataGridTextColumn(按名称显示类)
<DataGrid x:Name="DataGrid1" DockPanel.Dock="Top" Background="Transparent"
ItemsSource="{Binding ClassesObservableCollection, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
AutoGenerateColumns="False" >
<DataGrid.Columns>
<DataGridComboBoxColumn Width="220"
Header="Instructor"
SelectedValueBinding="{Binding InstructorID, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
SelectedValuePath="InstructorID"
DisplayMemberPath="InstructorName">
<DataGridComboBoxColumn.EditingElementStyle>
<Style TargetType="ComboBox">
<Setter Property="ItemsSource" Value="{Binding RelativeSource={RelativeSource AncestorType={x:Type UserControl}}, Path=DataContext.InstructorsObservableCollection}"/>
</Style>
</DataGridComboBoxColumn.EditingElementStyle>
<DataGridComboBoxColumn.ElementStyle>
<Style TargetType="ComboBox">
<Setter Property="ItemsSource" Value="{Binding RelativeSource={RelativeSource AncestorType={x:Type UserControl}}, Path=DataContext.InstructorsObservableCollection}"/>
</Style>
</DataGridComboBoxColumn.ElementStyle>
</DataGridComboBoxColumn>
通过这一切都很痛苦,谢天谢地,它的效果非常好。更新使用DataGridComboBoxColumn选项工作,但NEW ROWS不保存.SaveChanges()
!
请帮我找到我遗失的内容。
它可能是在这个神秘的SelectedItemBinding属性中,我永远无法使用我的viewmodel上的支持属性发送更改通知吗?
我是否需要明确告诉我的绑定Classes实体如何保存每个属性? (这似乎不合理......似乎应该用xaml绑定来处理它。)
感谢您的阅读!
答案 0 :(得分:0)
我认为你需要在cs文件中使用动态绑定。
1)如果在cs文件中创建绑定,则可以将oject传递给binding的converterParameter。您可以将ComboxColumn传递给转换器。
2)使用列元素获取当前选定的系列ID&amp; DataContext(ContactArrangement),并获取父控件的DataContext(PNSery集合)。
3)使用foreach枚举当前PNSery对象并分配给ContactArrangment对象。
答案 1 :(得分:0)
嗯,并不令人震惊,我需要手动将我的实体添加到我的ObjectContext中的实体集“Classes1”中。对我没有先尝试过这一点感到羞耻,但我认为所有详细的DataGrid绑定都能提供这种能力。我的新经验法则:如果导航属性中有任何类型的属性信息包含在实体中,我将不得不手动确保将这些实体添加到正确的实体集中。
叹息我之前因为没有吸取教训而感到愚蠢......令人尴尬...我的更新代码如下:
public void SaveClassesWithInstructors()
{
foreach(Class1 cl in this._classesCollection.Where(x => x.ClassID == 0))
{
var classToCreate = this._context.Classes1.Create();
classToCreate.InstructorID = ca.InstructorID;
classToCreate.ClassName = ca.ClassName;
this._context.Classes1.Add(classToCreate);
this._context.SaveChanges();
}
RaisePropertyChanged("ClassesCollection");
}
所以我想,至少对于那些需要使用实体框架从DataGrid列进行导航绑定和SaveChanges()的完整操作方法的人来说......这里是。