首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向EF 4.1添加记录不会反映在列表框中

问向EF 4.1添加记录不会反映在列表框中
EN

Stack Overflow用户
提问于 2013-04-05 00:05:13
回答 2查看 94关注 0票数 1

我有一个数据绑定列表框,它是首先使用EF 4.1模型构建的。所以我所有的类都是为我而建的。因为我有三个反映从外键回溯的表数据的控件。this.lstBox2.ItemSource = entityContext.TableObject2.ToList()将返回每条记录。而不是M-D显示的受外键约束限制的记录。

代码语言:javascript
复制
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的更新值分配给控件?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-05 00:34:49

而不是:

代码语言:javascript
复制
this.lstBox2.ItemsSource = null;

在保存更改以重建列表后,尝试从entityContext获取数据:

代码语言:javascript
复制
this.lstBox2.ItemsSource = entityContext.TableObject2.ToList();

我确信你可以采用一种更好的方法,但是为了快速地将数据库从数据库中取出并放入列表中,这个方法应该是可行的。

还有一个快速的代码位,你可以使用对象初始化器:

代码语言:javascript
复制
TableObject2 class2 = new TableObject2 { value1 = 0, value2 = "new location" };
票数 0
EN

Stack Overflow用户

发布于 2013-04-05 00:37:22

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

通常情况下,您需要使用Bind和PropertyChanged。

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

代码语言:javascript
复制
<ListBox ItemsSource={Binding YourCollectionProperty} >

在你的“view-model”中(或者如果那是你的“控件”,我不推荐这样做,那就像{Binding ElementName=_mywin, Path=YourCollectionProperty}一样)将属性定义为……

代码语言:javascript
复制
public ObservableCollection<POCOItem> YourCollectionProperty 
{
get
{
     return _collection ?? (_collection = WrapModel());
}
set
{}}  

在更新模型时实现IPropertyChanged interface ...

代码语言:javascript
复制
_collection = null;
OnPropertyChanged("YourCollectionProperty");

ObservableCollection在这里是没用的(一个数组/列表可以做同样的事情--保持模型集合同步并非易事。

所以,如果你需要和你的模型紧密地联系在一起--你可以把你的模型导航属性ICollection设置为ObservableCollection (尽管这有利弊,但不要深入讨论)。

例如,看这一个Do I need to implement INotifyPropertyChanged when using EF Code-First?

在这种情况下-当只是添加新项目时-这应该会自动转到你的ListBox。

如果刷新集合,则执行上述操作(为集合属性设置PropertyChanged )

Item Properties are not automatically updated -除非您也在模型上实现了IPropertyChanged。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15816204

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档