添加一个记录到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的更新值分配给控件?

添加一个记录到EF 4.1没有反映在列表框中

模型更改不会自动传播到视图模型或您的视图(因为我可以看到您没有MVVM视图模型?)

你通常需要做BindPropertyChanged

这是从设备上写的,非常粗糙和快速(我可能打错了什么东西等)…

<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" };