アプリケーションでEntityFramework、WPF、およびMVVMを使用していますが、EntityObjects間の関係のデータバインディングの更新で問題が発生しました。問題を数行のXAMLに縮小することができました。まだ、EFとMVVMにあまり自信がないので、誰かが私を助けてくれることを願っています。
とにかく、ここでは単純化されたXAMLを使用します。
<DatePicker Grid.Row="2" Grid.Column="1"
SelectedDate="{Binding Path=File.SentDate,
StringFormat={}{0:dd/MM/yyyy}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
VerticalAlignment="Center" IsEnabled="{Binding Path=IsEnabled}"/>
<ComboBox Grid.Row="3" Grid.Column="1" ItemsSource="{Binding Contacts}" DisplayMemberPath="Name"
SelectedItem="{Binding Path=File.Sender, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" IsEditable="True"
VerticalAlignment="Center">
</ComboBox>
<Label Content="{Binding Path=File.SenderId}" Grid.Row="4"/>
<Label Content="{Binding Path=File.Sender.Name}" Grid.Row="5"/>
<Label Content="{Binding Path=File.SentDate}" Grid.Row="6"/>
最後の3つのラベルを使用してデータバインディングをテストしています。DatePickerを使用してFile.SentDateを変更すると、データバインディングが最後のラベルに問題なく更新されます。
これで、FileはタイプEntityObjectであり、タイプGUIDのSenderIdプロパティがあります。また、Senderプロパティを介して連絡先との関係もあります。明らかに、SenderIdは、Sender関係を介してFileに関連付けられている対応するContactEntityObjectのGUIDです。ファイルには、Contactタイプの単一の送信者のみを含めることができます。
とにかく、コンボボックスを使用して別の送信者を選択すると、File.SenderIdプロパティを表示するラベルが適切に更新されます。ただし、File.Sender.Nameプロパティを持つもの、つまり関係を使用するものは更新されません。
ですから、EFの関係のデータバインディングを更新することには何か特別なことがあると思います。
誰かがこれに対する解決策を提案できますか?