全て、
私はDataBase First Entity Framework v4.4を使用しています。DB (およびデータ モデル) には、Table2 と 1 対多の関係を持つ Table1 があります。
WPF の DataGrid を Table1.Local.First().Table2 にバインドしています (簡単にするために、最初に Table1.Local にエンティティがあると仮定します)。
ビューモデル:
Public SomeEntityDBContextWithTable1AndTable2 Container { get; set; }
Public ICollection Table2ToDisplay { get { return Container.Table1.Local.First().Table2; } } //Note: :Many navigation properties return ICollection<T>, but the object type is of ObservableCollection<T>.
XAMLには、次のものがあります
<GroupBox Header=Table2 DataContext="{Binding Path=Table2ToDisplay, UpdateSourceTrigger=PropertyChanged}">
<DataGrid ItemsSource="{Binding}" AutoGenerateColumns="False" CanUserAddRows="True">
<DataGrid.Columns>
<!--A bunch of columns-->
</DataGrid.Columns>
</DataGrid>
</GroupBox>
テキスト ボックスである NewItemPlaceHolder 内をクリックすると、PresentationFramework.dll で System.InvalidOperationException が発生します。これでアプリケーションがクラッシュすることはありませんが、出力に表示されます。私の推測では、エンティティが別のスレッドに追加されたため、別のスレッドで CollectionChanged イベントが発生し、これにより InvalidOperationException が発生します。ただし、コードは主に XML 経由で行われるため、この例外を処理する方法を見つけることができないようです (または、既に処理されているか、単に Output に報告されているだけです)。":Many" ナビゲーション プロパティが ObservableCollection 型である EntityFramework で CanUserAddRows="True" を使用する安全な方法はありますか?
CollectionViewSource 内に Table2ToDisplay プロパティをラップしようとしたことも指摘しておく必要がありますが、それでも出力に InvalidOperationException が表示されます。
前もって感謝します。