C# WPF可观测采集数据集';当DataContext发生更改时,t将更新
我有C# WPF可观测采集数据集';当DataContext发生更改时,t将更新,c#,wpf,entity-framework,mvvm,observablecollection,C#,Wpf,Entity Framework,Mvvm,Observablecollection,我有Data=newobservetecollection(dataContext.Data) dataContext是我的实体数据是SQL Server表 现在我运行Import方法,它在SQL Server上填充数据表: public static void Import(DataTable table) { var dataContext = DataContext.Instance.Entities; foreach (DataRow r
Data=newobservetecollection(dataContext.Data)代码>
dataContext
是我的实体<代码>数据
是SQL Server表
现在我运行Import方法,它在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();
}
但是我的ObservableCollection数据仍然是空的。如何更新它?您需要从datacontext中注册数据,并在该点将其添加到可观察的集合中
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;
}
您需要从datacontext中注册数据,并将其添加到此时的可观察集合中
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;
}
:
初始化ObservaleCollection类的新实例
包含从指定集合复制的元素
这里的关键字是它从集合中复制元素。之后,它不会与传入的枚举保持任何同步。您的代码正在更新数据上下文
对象,而不是数据
对象(ObservableCollection)。您必须构建自己的ObservaleCollection同步版本,或者创建方法来保持同步
如果您不关心保持dataContext
对象的同步,并且只想在一次性加载中使用它,那么在ObservableCollection的构造函数中使用它之前,您必须在该枚举中拥有所有适当的对象
我猜你会做类似的事情:
Data = new ObservableCollection<DATA>(dataContext.DATA)
// Afterwards...
Import(foobar);
Data=新的ObservableCollection(dataContext.Data)
//后来。。。
进口(foobar);;
应该是:
Import(foobar);
// Afterwards...
Data = new ObservableCollection<DATA>(dataContext.DATA)
导入(foobar);
//后来。。。
数据=新的ObservableCollection(dataContext.Data)
:
初始化ObservaleCollection类的新实例
包含从指定集合复制的元素
这里的关键字是它从集合中复制元素。之后,它不会与传入的枚举保持任何同步。您的代码正在更新数据上下文
对象,而不是数据
对象(ObservableCollection)。您必须构建自己的ObservaleCollection同步版本,或者创建方法来保持同步
如果您不关心保持dataContext
对象的同步,并且只想在一次性加载中使用它,那么在ObservableCollection的构造函数中使用它之前,您必须在该枚举中拥有所有适当的对象
我猜你会做类似的事情:
Data = new ObservableCollection<DATA>(dataContext.DATA)
// Afterwards...
Import(foobar);
Data=新的ObservableCollection(dataContext.Data)
//后来。。。
进口(foobar);;
应该是:
Import(foobar);
// Afterwards...
Data = new ObservableCollection<DATA>(dataContext.DATA)
导入(foobar);
//后来。。。
数据=新的ObservableCollection(dataContext.Data)
如果您使用的是较新的DbContext
API,您可以在DbSet
上使用,它会。如果您使用的是较新的DbContext
API,您可以在DbSet
上使用,它会。感谢您的回答,它非常有用。应用程序的结构有点复杂<代码>数据
集合属于文档视图模型
,但我从仪表板视图模型
运行导入(foobar)
:用户按导入按钮->仪表板视图模型的RelayCommand->导入(foobar)。实际上,我无法访问仪表板视图模型
中的数据
集合。你对我的情况有什么建议DocumentViewModel
也有子代我正在考虑使用Messenger
向所有DocumentViewModel
的子代广播消息以更新其数据集,但我不确定此解决方案是否会影响性能…感谢您的回答,它非常有用。应用程序的结构有点复杂<代码>数据
集合属于文档视图模型
,但我从仪表板视图模型
运行导入(foobar)
:用户按导入按钮->仪表板视图模型的RelayCommand->导入(foobar)。实际上,我无法访问仪表板视图模型
中的数据
集合。你对我的情况有什么建议DocumentViewModel
也有子代我正在考虑使用Messenger
向所有DocumentViewModel
的子代广播一条消息,以更新其数据
集合,但我不确定此解决方案是否会影响性能。。。