当 DataContext 发生更改时,WPF ObservableCollection 不会更新
本文关键字:ObservableCollection WPF 更新 DataContext | 更新日期: 2023-09-27 17:56:56
我有Data = new ObservableCollection<DATA>(dataContext.DATA);
dataContext
是我的实体。 DATA
是 SQL Server 表。
现在我运行导入方法,该方法填充DATA
SQL 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();
}
但是我的可观察集合Data
仍然是空的。如何更新?
ObservableCollection<T> Constructor (IEnumerable<T>)
:
初始化 ObservableCollection 类的新实例,该实例 包含从指定集合复制的元素。
这里的关键字是它从集合中复制元素。之后,它不会保留与您传入的枚举的任何同步。您的代码正在更新dataContext
对象,而不是您的Data
对象(可观察集合)。您必须构建自己的 ObservableCollection 同步版本,或者创建方法来使它们保持同步。
如果您不关心保持dataContext
对象同步,而只想在一次性加载中使用它,那么在 ObservableCollection 的构造函数中使用它之前,您必须在该枚举中拥有所有适当的对象。
我的猜测是你做了类似于以下内容的事情:
Data = new ObservableCollection<DATA>(dataContext.DATA)
// Afterwards...
Import(foobar);
它应该是:
Import(foobar);
// Afterwards...
Data = new ObservableCollection<DATA>(dataContext.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();
var data = datContext.whateverretreval();
Data = data;
}