3

今まで、Visual Studio 2010 と Entity Framework 4.x を使用していました。(データベースファースト)。生成されたエンティティ クラスの一部について、部分的なクラス定義といくつかの読み取り専用プロパティを追加しました。プロパティの変更に関する通知を受け取るには、エンティティの PropertyChanged イベントを処理し、クエリされたプロパティの 1 つが変更された場合に、追加された読み取り専用プロパティの PropertyChanged イベントを発生させることができます。やさしい。

最近、デフォルトでEntity Framework 5を含むVisual Studio 2012に切り替えました。既存のデータベース (Database First) から新しいモデルを作成し、エンティティ クラスが生成されました。しかし、生成されたクラスには INotifyPropertyChanged を利用する機能がないようです - それらは POCO クラス (デフォルトのコード生成戦略) であり、Entity Framework 4.x のように EntityObject から派生しないためです。

私の最初の質問は、Entity Framework 5 (データベース ファースト) では、プロパティの変更についてどのように通知を受け取ることができますか? 作成したばかりのエンティティ クラスのインスタンスをバインドしたとしても (コンテキスト クエリからの動的エンティティ プロキシではないように)、WPF のデータ バインディングは機能するため、これは何らかの形で可能である必要があります。

2 番目の質問は、Entity Framework 5 (データベース ファースト) では、エンティティ オブジェクトの関連付けられたコレクションを wpf コントロールにバインドするにはどうすればよいですか? エンティティ関係の生成された関連付けプロパティは、HashSet の既定のインスタンスを持つ ICollection です。そのため、関連するエンティティ オブジェクトが追加または削除された場合、バインドされた wpf コントロールはそのコレクションの変更について通知されません (エンティティ セットのローカル プロパティで ObservableCollection を使用している場合でも、関連付けプロパティは変更通知のない HashSet のままです。) .

これらの本質的なことを達成するための「意図された」方法は何ですか?

前もって感謝します、ハンネス

4

1 に答える 1

1

手動アプローチ: 最初にコードを使用して、興味深いセッターから手動で PropertyChanged イベントを発生させてみませんか? たくさんの作業がありますが、多くのコントロールがあります。

動的アプローチ Document という名前のプロパティを持つ EditViewModel があり、生成された EF エンティティへの参照が含まれており、この Document プロパティにバインドする必要があるとします。

アダプターの設計パターンを利用して、クラス ウィッチにエンティティをラップして、INotifyPropertyChanged を実装し、セッターが呼び出されるたびに PropertyChanged イベントを発生させることができます。インターセプターでバインドするエンティティにバインドする代わりに、変更されたプロパティを発生させ、リフレクション API を使用してラップされたエンティティ オブジェクトにプロパティ呼び出しを委任します。

ここで、ViewModel に INotifyPropertyChanged を実装させることが目標である魔女の良い例を見つけることができますが、ドキュメントに対してもこれを行うことができます: http://www.hightech.ir/SeeSharp/best-implementation-of-inotifypropertychange-ever

于 2013-02-19T06:48:23.257 に答える