【问题标题】:Linq-to-SQL: binding ListViewLinq-to-SQL:绑定 ListView
【发布时间】:2009-06-29 13:38:07
【问题描述】:

我已经为将我的ListView 绑定到一张桌子而苦苦挣扎了一段时间。我已经阅读了各种解决方案,但总是遇到麻烦。

我有 2 个数据库表:Customers 和 Products。对于每个Customer,都有一个Products 列表。

在我的第一次尝试中,我绑定到生成的 Linq-to-SQL 代码。这意味着我立即绑定到Customer.Products。但由于这是System.Data.Linq.EntitySet<Product> 类型,当项目被添加到数据库/从数据库中删除时,我不会收到通知。

所以我通过向Customer 添加一个方法来扩展生成的代码,该方法将返回的System.Data.Linq.EntitySet<Product> 包装在ObservableCollection 中(根据各种博客的建议)

public ObservableCollection<Product> ObservableProducts
{
    get
    {
        return new ObservableCollection<Product>(Products);
    }
}

但现在我无法向集合中添加任何内容。当我打电话给ObservableProducts.Add() 时,什么都没有添加..

【问题讨论】:

    标签: c# .net wpf xaml listview


    【解决方案1】:

    ObservableCollection不是基础集合的视图 - 它本身就是一个集合。当您将List 传递给ObservableCollection 时,List 中的项目将被复制到ObservableCollection。

    所以您的项目正在被添加,但仅添加到ObservableCollection - 而不是您传递给它的底层List。

    前进的选项包括:

    • 在数据层中使用ObservableCollection。立即将实体列表转换为 ObservableCollection 并在整个应用程序中使用。
    • 监听ObservableCollection 的更改并将这些更改应用到底层List。
    • 编写一个INotifyCollectionChanged 的实现是一个底层集合的视图。这只能单向工作(OC->List 但不是 List->OC),如果您有一个多线程应用程序,就会变得棘手。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-10
      • 2010-12-27
      • 1970-01-01
      • 2011-09-07
      相关资源
      最近更新 更多