我在数据绑定和实体框架的导航属性方面遇到了一些问题。
我有两个类,由实体框架设计器生成:
Foo 类:
id (int)
bar (Bar)
...
班级酒吧
id (int)
name (string)
...
使用ObservableCollection<Foo>
,我用以下列填充了数据网格:
<DataGrid.Columns>
<DataGridTextColumn Header="Id" Binding="{Binding Path=id}"/>
<DataGridTemplateColumn Header="Bar">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox
SelectedValuePath="Id"
SelectedValue=
"{Binding Path=bar.Id, Mode=TwoWay,
UpdateSourceTrigger=PropertyChanged}"
DisplayMemberPath="name"
ItemsSource=
"{Binding Path=BarList,
RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type Window}}}"
Background="White" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
ComboBox 填充了一个ObservableCollection<Bar>
并且正确显示了当前的Bar
.
当我在组合框中选择另一个项目时,问题就来了。我收到以下错误:
System.Windows.Data Error: 8 : Cannot save value from target back to source.
System.InvalidOperationException: The property 'Id' is part of the object's key information and cannot be modified
我可以看到为什么会弹出错误,但是我该如何以不同的方式处理呢?
Foo
编辑: and之间的关系Bar
是 N..1,这意味着 aFoo
有 1 或 0Bar
而 Bar 可以有几个Foo
s。
目前,我无法Bar
为我Foo
的 s 选择新的。