EF 更新未更新 GridView
Posted
技术标签:
【中文标题】EF 更新未更新 GridView【英文标题】:EF Update is not Updating the GridView 【发布时间】:2013-03-09 14:49:16 【问题描述】:我仍处于 WPF、EF 和 MVVM 的学习阶段,现在我遇到了以下问题。我可以在我的 DataGridView 中删除和插入新项目,但我不知道如何更新我的项目。
我所做的只是选择一个已经有主键的空行,然后将数据放入其中。它正在工作(更新数据库),但 GridView 没有刷新。我需要先重新启动程序才能看到我更新的数据。
我的执行命令来更新我的数据库。我在 ViewModel 类中
public void ExecuteUpdate(object obj)
try
SelectedIndex.Child_Update(new Farbe FarbauswahlNr = SelectedIndex.FarbauswahlNr, Kurztext = SelectedIndex.Kurztext, Ressource = SelectedIndex.Ressource, Vari1 = SelectedIndex.Vari1, Vari2 = SelectedIndex.Vari2 );
//ListeAktualisieren --> Refreshing the List
ListeAktualisieren();
catch (Exception e)
MessageBox.Show(e.ToString());
这是我的刷新方法,它应该刷新 GridView。我在 ViewModel 类中
public void ListeAktualisieren()
farbliste.ListeAktualisieren(db);
farbliste.Model = farbliste.Model.Concat(farbliste.Addlist).ToList();
Model = farbliste.Model;
farbliste.Addlist.Clear();
该方法正在调用我的业务列表,该列表也有一个刷新方法。在这里从我的数据库中读取。我在 Business List 课程中
public void ListeAktualisieren(TestDBEntities db)
Model.Clear();
foreach (var item in db.Farben)
//Insert and delete working
add = new Farbe FarbauswahlNr = item.FarbauswahlNr, Kurztext = item.Kurztext, Ressource = item.Ressource, Vari1 = Convert.ToBoolean(item.Var1), Vari2 = item.Vari2 ;
Addlist.Add(add);
模型是我的 GridView 的来源,它在更新时不刷新更改的数据,但在插入或删除时显示新的数据行。
【问题讨论】:
【参考方案1】:您需要具有已实施 INotifyPropertyChanged 的 Observablecollections 和 Classes。通过 insert 将新元素添加到 Observablecollection 并引发 event 属性changed by a change。 其余的应该由 WPF 完成。
编辑:DataGrid 的 Sourcecollection 必须是 Observablecollection。
Edit2:为了很好,我把 cmets 的结果放在这里 ;-) DataGrid 的每一行都是集合的一个元素。一行的每个单元格都侦听其元素的 PropertyChangedEvent(字符串区分大小写,所以要小心)。如果在 propertychangedevent 之后没有调用属性的 getter,则绑定没有收到该事件。 这段代码可以帮助确保您不会使用不存在的字符串进行调用:
private void VerifyPropertyName(string PropertyName)
if (string.IsNullOrEmpty(PropertyName))
return;
if (TypeDescriptor.GetProperties(this)(PropertyName) == null)
string msg = "Ungültiger PropertyName: " + PropertyName;
if (this.ThrowOnInvalidPropertyName)
throw new isgException(msg);
else
Debug.Fail(msg);
【讨论】:
我的属性中确实有一个 OnPropertyChange。 PropertyChangedEvent 必须到达 WPF 层您从 ViewModel 到 WPF 的连接如何? Farbliste.cs 和 Farbe.cs 是 CSLA 类,所以我认为不需要 Observablecollection? 你说得对,我没有仔细阅读你的代码 :-)。您是否使用正确的字符串通知 Propertychanged? (区分大小写) 是的。 FarbViewModel 获得了属性模型。但它是从 FarbListe.cs 获得的【参考方案2】:尝试将此添加到您的绑定部分 ItemsSource="Binding Path=Model, UpdateSourceTrigger= PropertyChanged"
【讨论】:
以上是关于EF 更新未更新 GridView的主要内容,如果未能解决你的问题,请参考以下文章
无法执行 FunctionImport“entitys.xx”,因为未将它映射到存储函数。EF