1

我有Data = new ObservableCollection<DATA>(dataContext.DATA);

dataContext是我的实体。DATA是 SQL Server 表。

现在我运行 Import 方法,它填充DATASQL Server 上的表:

    public static void Import(DataTable table)
    {
        var dataContext = DataContext.Instance.Entities;

        foreach (DataRow row in table.Rows)
        {
            .......

            var dataRow = new DATA
            {
               .........
            };

            dataContext.AddToDATA(dataRow);
        }
        dataContext.SaveChanges();
    }

但我的 ObservableCollectionData仍然是空的。我该如何更新它?

4

2 回答 2

3

ObservableCollection<T> Constructor (IEnumerable<T>)

初始化包含从指定集合复制的元素的 ObservableCollection 类的新实例。

这里的关键字是它从集合中复制元素。之后,它不会与您传入的枚举保持任何同步。您的代码正在更新dataContext对象,而不是您的Data对象(ObservableCollection)。您要么必须构建自己的 ObservableCollection 同步版本,要么创建方法以使它们保持同步。

如果您不关心保持dataContext对象同步并且只想在一次性加载中使用它,那么在您的 ObservableCollection 的构造函数中使用它之前,您必须在该枚举中拥有所有适当的对象。

我的猜测是你做了类似于以下的事情:

Data = new ObservableCollection<DATA>(dataContext.DATA)

// Afterwards...
Import(foobar);

它应该是:

Import(foobar);

// Afterwards...
Data = new ObservableCollection<DATA>(dataContext.DATA)
于 2013-01-31T17:18:13.770 回答
1

您需要从 datacontext 中重新获取数据并将其添加到此时的 observable 集合中。

public static void Import(DataTable table)
{
    var dataContext = DataContext.Instance.Entities;

    foreach (DataRow row in table.Rows)
    {
        .......

        var dataRow = new DATA
        {
           .........
        };

        dataContext.AddToDATA(dataRow);
    }
    dataContext.SaveChanges();

    var data = datContext.whateverretreval();

    Data = data;
}
于 2013-01-31T17:17:59.503 回答