Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用实体框架和WPF DataGrid进行双向数据绑定_Wpf_Entity Framework_Wpfdatagrid - Fatal编程技术网

使用实体框架和WPF DataGrid进行双向数据绑定

使用实体框架和WPF DataGrid进行双向数据绑定,wpf,entity-framework,wpfdatagrid,Wpf,Entity Framework,Wpfdatagrid,我在使用WPF 4.0 DataGrid的add功能自动将实体框架实体添加到ObjectContext的EntitySet时遇到问题。以下是设置: 数据网格-->边界到-->列表集合视图-->边界到-->实体集 当我以交互方式向DataGrid添加行时,EntitySet没有添加新的实体。但是,更新行的单元格数据实际上会更新绑定实体的属性 知道我做错了什么吗 以下是ListCollectionView的XAML: <CollectionViewSource x:Key="FieldList

我在使用WPF 4.0 DataGrid的add功能自动将实体框架实体添加到ObjectContext的EntitySet时遇到问题。以下是设置:

数据网格-->边界到-->列表集合视图-->边界到-->实体集

当我以交互方式向DataGrid添加行时,EntitySet没有添加新的实体。但是,更新行的单元格数据实际上会更新绑定实体的属性

知道我做错了什么吗

以下是ListCollectionView的XAML:

<CollectionViewSource x:Key="FieldList"
    Source="{Binding DB.Fields}"
    CollectionViewType="{x:Type data:ListCollectionView}">
    <CollectionViewSource.SortDescriptions>
        <ComponentModel:SortDescription PropertyName="Name" />
    </CollectionViewSource.SortDescriptions>
</CollectionViewSource>

您使用
列表收集视图
有什么特殊原因吗?您是如何创建
列表集合视图的

调用
CollectionViewSource.GetDefaultView(ObjectQuery)
将生成一个
BindingListCollectionView
。我刚刚运行了一些测试,并调用
IEditableCollectionView.AddNew()
IEditableCollectionView.CommitNew()
将新实体按预期添加到实体集


我建议您只需将
ObjectContext
ObjectQuery
属性绑定到
DataGrid
ItemsSource
,就会使用默认的集合视图,最终提供您所期望的行为。

使用
ListCollectionView
有什么特别的原因吗?您是如何创建
列表集合视图的

调用
CollectionViewSource.GetDefaultView(ObjectQuery)
将生成一个
BindingListCollectionView
。我刚刚运行了一些测试,并调用
IEditableCollectionView.AddNew()
IEditableCollectionView.CommitNew()
将新实体按预期添加到实体集


我建议您只需将
ObjectContext
ObjectQuery
属性绑定到
DataGrid
ItemsSource
,然后将使用默认的集合视图,最终为您提供所需的行为。

我使用的是ListCollectionView,以便可以对XAML中的实体进行排序。有没有其他方法不使用CollectionViewSource(类型为ListCollectionView)来执行此操作?我还添加了用于创建ListCollectionViewType的XAML,是否省略CollectionViewType=“{x:type data:ListCollectionView}”?这将创建一个默认的集合视图,该视图将为您完成此操作。当我尝试设置窗口的DataContext时,会得到“'System.Windows.Data.BindingListCollectionView'视图不支持排序”。这就是我最初改为ListCollectionView的原因。太糟糕了。在这种情况下,我只能考虑使用LitsCollectionView或其他让您满意的工具,并向提交逻辑中添加一些手动代码。您需要遍历集合视图中的项,并显式添加EntityState为EntityState.Detached的项。我使用的是ListCollectionView,以便可以对XAML中的实体进行排序。有没有其他方法不使用CollectionViewSource(类型为ListCollectionView)来执行此操作?我还添加了用于创建ListCollectionViewType的XAML,是否省略CollectionViewType=“{x:type data:ListCollectionView}”?这将创建一个默认的集合视图,该视图将为您完成此操作。当我尝试设置窗口的DataContext时,会得到“'System.Windows.Data.BindingListCollectionView'视图不支持排序”。这就是我最初改为ListCollectionView的原因。太糟糕了。在这种情况下,我只能考虑使用LitsCollectionView或其他让您满意的工具,并向提交逻辑中添加一些手动代码。您需要遍历集合视图中的项,并显式添加EntityState为EntityState.Detached的项。