添加一个记录到EF 4.1没有反映在列表框中
本文关键字:列表 一个 EF 记录 添加 | 更新日期: 2023-09-27 18:07:21
我有一个数据绑定列表框,它是首先使用EF 4.1模型构建的。所以我所有的课程都是为我建的。因为我有三个控件反映从外键回溯的表数据。this.lstBox2。ItemSource = entityContext.TableObject2.ToList()将返回每条记录。而不是M-D显示的受外键约束限制的记录。
TableObject2 class2 = new TableObject2();
class2.value1 = 0;
class2.value2 = "new location";
using (TKOEntities entityContext = new TKOEntities())
{
entityContext.TableObject2.AddObject(class2);
entityContext.SaveChanges();
this.lstBox2.ItemsSource = null;
}
SaveChanges将数据更新到数据库中。但是控件没有刷新(this.lstBox2.Refresh()不起作用)。如果我尝试将值设置为控件。我也得到了ItemControl。ItemSource错误。如何将保存到entitycontext的更新值分配给控件?
模型更改不会自动传播到视图模型或您的视图(因为我可以看到您没有MVVM视图模型?)
你通常需要做Bind
和PropertyChanged
。
这是从设备上写的,非常粗糙和快速(我可能打错了什么东西等)…
<ListBox ItemsSource={Binding YourCollectionProperty} >
在你的"视图模型"(或者如果这是你的"控制",我不建议,然后做一些像{Binding ElementName=_mywin, Path=YourCollectionProperty}
)定义属性为…
public ObservableCollection<POCOItem> YourCollectionProperty
{
get
{
return _collection ?? (_collection = WrapModel());
}
set
{}}
实现IPropertyChanged interface
当你的模型更新…
_collection = null;
OnPropertyChanged("YourCollectionProperty");
ObservableCollection
在这里是无用的(数组/列表将做同样的事情-保持模型集合同步并不容易。
所以,如果你需要与你的模型紧密联系-你可以让你的模型导航属性ICollection
成为ObservableCollection
(虽然有利弊,但不是进入那个)。
。当使用EF代码时,我需要实现INotifyPropertyChanged吗?
在这种情况下-当只是添加新的项目-应该自动到你的列表框。
如果您刷新集合-然后执行上述操作(为集合属性设置PropertyChanged)
Item Properties are not automatically updated
-除非你在你的模型上实现IPropertyChanged。
而不是:
this.lstBox2.ItemsSource = null;
保存更改以重新构建列表后,尝试从entityContext中获取数据:
this.lstBox2.ItemsSource = entityContext.TableObject2.ToList();
我相信您可以采用更好的方法,但是为了快速地将您的数据从数据库中取出并放入列表中,这应该可以工作。
也是一个快速代码位,你可以使用对象初始化器:
TableObject2 class2 = new TableObject2 { value1 = 0, value2 = "new location" };