Wpf 类型为'的首次机会例外;系统无效操作异常';发生在PresentationFramework.dll中

Wpf 类型为'的首次机会例外;系统无效操作异常';发生在PresentationFramework.dll中,wpf,entity-framework,exception,invalidoperationexception,Wpf,Entity Framework,Exception,Invalidoperationexception,全部, 我使用的是DataBase First Entity Framework v4.4。在数据库(和数据模型)中是表1,它与表2有1:many关系 我正在将WPF中的DataGrid绑定到Table1.Local.First().Table2(为简单起见,假设Table1.Local中有一个实体) 视图模型: Public SomeEntityDBContextWithTable1AndTable2 Container { get; set; } Public ICollection Tab

全部,

我使用的是DataBase First Entity Framework v4.4。在数据库(和数据模型)中是表1,它与表2有1:many关系

我正在将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>.
Public sometentitydbcontextwithTable1和Table2容器{get;set;}
Public ICollection Table2ToDisplay{get{return Container.Table1.Local.First().Table2;}//Note::许多导航属性返回ICollection,但对象类型为ObservableCollection。
在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完成的,我似乎找不到处理此异常的方法(或者它已经被处理了,只是它正在报告给输出)。是否有一种安全的方法可以将CanUserAddRows=“True”与EntityFramework一起使用,其中“:Many”导航属性属于ObservableCollection类型

我应该指出,我也尝试过将Table2ToDisplay属性包装到CollectionViewSource中,但仍然在输出中看到InvalidOperationException


提前感谢。

我想随便猜一猜,因为并不是所有的细节(更新代码、堆栈跟踪等)都显示您正在非ui线程中更改绑定集合

在这种情况下,您需要:

(在更新逻辑中)


我将做一个粗略的猜测,因为并不是所有的细节都存在(更新代码、堆栈跟踪等),所以您正在非ui线程中更改绑定集合

在这种情况下,您需要:

(在更新逻辑中)


好的。将VisualStudio的调试器更改为在所有异常情况下都停止会导致我进入一些insite。例外情况是“AddNew…”期间不允许使用NewItemPlaceHolder”,这是由于我的实体上的PropertyChanged事件引起的。原来这个异常已经被处理了,所以我觉得我很好。

好的。将VisualStudio的调试器更改为在所有异常情况下都停止会导致我进入一些insite。例外情况是“AddNew…”期间不允许使用NewItemPlaceHolder”,这是由于我的实体上的PropertyChanged事件引起的。原来这个异常已经被处理了,所以我觉得我很好

Application.Current.Dispatcher.Invoke((Action)(() =>
    {
       // update collection here
    });