DataContext更改后,WPF ObservableCollection尚未更新

时间:2013-01-31 17:09:56

标签: c# wpf entity-framework mvvm observablecollection

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

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

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

    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();
    }

但是我的ObservableCollection Data仍然是空的。我该如何更新?

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分: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;
}