【问题标题】:2-Way databinding with Entity Framework and WPF DataGrid使用 Entity Framework 和 WPF DataGrid 进行 2 路数据绑定
【发布时间】:2010-04-23 17:52:50
【问题描述】:

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

DataGrid-->BoundTo-->ListCollectionView-->BoundTo-->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>

【问题讨论】:

    标签: wpf entity-framework wpfdatagrid


    【解决方案1】:

    您使用ListCollectionView 有什么特别的原因吗?你是如何创建你的ListCollectionView的?

    调用CollectionViewSource.GetDefaultView( ObjectQuery&lt;&gt; ) 会产生BindingListCollectionView。我刚刚运行了一些测试并调用 IEditableCollectionView.AddNew()IEditableCollectionView.CommitNew() 按预期将新实体添加到实体集。

    我建议您简单地将您的ObjectContextObjectQuery&lt;&gt; 属性绑定到DataGridItemsSource,然后将使用默认集合视图,最终为您提供您期望的行为。

    【讨论】:

    • 我正在使用 ListCollectionView,因此我可以对 XAML 中的实体进行排序。是否有另一种方法可以在不使用 CollectionViewSource(ListCollectionView 类型)的情况下做到这一点?
    • 我还添加了用于创建 ListCollectionView 的 XAML
    • 省略 CollectionViewType="{x:Type data:ListCollectionView}" 怎么样?这应该会创建一个默认的集合视图,它应该可以为您解决问题。
    • 当我这样做时,我得到“'System.Windows.Data.BindingListCollectionView' 视图不支持排序。”当我尝试设置窗口的 DataContext。这就是我最初更改为 ListCollectionView 的原因。
    • 太糟糕了。在这种情况下,我只能考虑使用 LitsCollectionView 或其他任何让您满意的方法,并将一些手动代码添加到您的提交逻辑中。您需要遍历集合视图中的项目并显式添加 EntityState 为 EntityState.Detached 的项目。
    猜你喜欢
    • 1970-01-01
    • 2011-03-22
    • 1970-01-01
    • 2011-03-22
    • 2012-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多