WPF アプリケーションの Linq と ObservableCollections に問題があります。
問題のコンテキスト:
User と BankAccounts の 2 つのテーブルを持つ非常に単純な SQL データベースを作成しました。User テーブルは、BankAccounts テーブルと 1 対多の関係にあります。次に、Linq-to-SQL データクラスを作成しました。これは正常に機能しました ==> 2 つのテーブル間の関連付けも検出されました。
次に、正常に動作するすべてのユーザーを取得する関数を作成しました。
DataClassesDataContext dc = new DataClassesDataContext
var query = from u in dc.Users
select u;
ここで、各ユーザーに新しい BankAccount を追加したいとします (可能性は低いですが、それでもなお)。次のコードを追加できます
for each(User u in query)
{
u.BankAccounts.Add(New BankAccount());
}
上記はすべて正常に動作します。BankAccounts プロパティは、データベースと Linq DataClasses の関連付けにより、自動的に User クラスの一部になります。
ただし、私のアプリケーションでは、最初にクエリ結果を ObservableCollection に追加します。これにより、あらゆる種類のデータバインディングと変更通知を使用できます。これは、次のコードによって実現されます。
ObservableCollection<User> oUsers = new ObservableCollection<User>(query);
問題: ObservableCollection 内では、ユーザーの BankAccounts プロパティを操作できません。タイプが EntitySet<> になっているためです。そのため、次のステートメントはもう実行できません。
for each(User u in oUsers)
{
u.BankAccounts.Add(New BankAccount());
}
どういうわけか、クエリ結果が観察可能なコレクションに追加されると、 user.BankAccounts プロパティにアクセスできなくなります。ただし、BankAccounts プロパティをリストボックスなどの任意のコントロールにバインドすることは可能であり、正しいデータが含まれています。
これらの「関連付けられた」プロパティにアクセスできるobservableColllction(または同様のコレクション)を作成する方法はありますか?解決が本当に待ち遠しいです。
前もって感謝します!よろしくお願いします、
Bas Zweeris E: Bas.Zweeris@Capgemini.com