我还在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());
}
}
这是我的Regresh方法,它应该刷新GridView。我在ViewModel类
public void ListeAktualisieren()
{
farbliste.ListeAktualisieren(db);
farbliste.Model = farbliste.Model.Concat(farbliste.Addlist).ToList();
Model = farbliste.Model;
farbliste.Addlist.Clear();
}
方法正在调用我的商家列表,它也有一个Refreh方法。在这里阅读我的数据库。我在商业清单类
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的源,它在更新时不刷新已更改的数据,但在插入或删除时显示新的数据行。
答案 0 :(得分:2)
您需要使用已实现的INotifyPropertyChanged的Observablecollections和Classes。通过insert将新元素添加到Observablecollection,并通过更改引发事件propertychanged。 其余的应由WPF完成。
编辑:DataGrid的Sourcecollection需要是Observablecollection。
Edit2:为了好,我把评论的结果放在这里;-) DataGrid的每一行都是集合的一个元素。一行中的每个单元格都会侦听其元素的PropertyChangedEvent(String是Casesensitive所以要小心)。如果在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);
}
}
}
答案 1 :(得分:0)
尝试将此添加到您的绑定部分 ItemsSource =“{Binding Path = Model,UpdateSourceTrigger = PropertyChanged”}