我在數據綁定和實體框架的導航屬性方面遇到了一些麻煩。與實體框架的數據綁定使用組合框的導航屬性
我有兩個班,由實體框架設計器生成的:
類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>
組合框被填入一個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
和Bar
之間的關係是N..1,這意味着一個Foo
具有1或0 Bar
而酒吧可以有幾個Foo
第
目前,我無法爲我的Foo
s選擇新的Bar
。
你好@thakrage!你到底想在這裏完成什麼?改變你的一個ViewModel的ID確實看起來有問題! – Sisyphe
我沒有使用MVVM,但我想要一個包含酒吧列表的組合框。從這個列表中,我希望能夠爲我的Foo選擇另一個Bar。我將編輯問題 –
即使您沒有使用MVVM,您的DataGrid似乎也是綁定的。所以你的每一行都是從一個底層對象生成的(在你的情況下是一個Foo)你是否想在ComboBox中選擇一個值時修改ObservableCollection?編輯:剛剛看到你的編輯:所以comboxBox是爲了讓用戶選擇一個酒吧給予FOO? –
Sisyphe