我有一个数据绑定列表框,它是首先使用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的更新值分配给控件?
发布于 2013-04-05 00:34:49
而不是:
this.lstBox2.ItemsSource = null;在保存更改以重建列表后,尝试从entityContext获取数据:
this.lstBox2.ItemsSource = entityContext.TableObject2.ToList();我确信你可以采用一种更好的方法,但是为了快速地将数据库从数据库中取出并放入列表中,这个方法应该是可行的。
还有一个快速的代码位,你可以使用对象初始化器:
TableObject2 class2 = new TableObject2 { value1 = 0, value2 = "new location" };发布于 2013-04-05 00:37:22
模型更改不会自动传播到view-model或您的视图(我可以看到您没有MVVM view- model ?)
通常情况下,您需要使用Bind和PropertyChanged。
这是从设备上写的,非常粗糙和快速(我可能打错了什么,等等)……
<ListBox ItemsSource={Binding YourCollectionProperty} >在你的“view-model”中(或者如果那是你的“控件”,我不推荐这样做,那就像{Binding ElementName=_mywin, Path=YourCollectionProperty}一样)将属性定义为……
public ObservableCollection<POCOItem> YourCollectionProperty
{
get
{
return _collection ?? (_collection = WrapModel());
}
set
{}} 在更新模型时实现IPropertyChanged interface ...
_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。
https://stackoverflow.com/questions/15816204
复制相似问题