2013-03-20 3 views
2

Я все еще участвую в фазе обучения WPF, EF и MVVM, и теперь у меня есть следующий Probplem. Я могу удалить и вставить новые элементы в свой DataGridView, но я не знаю, как обновлять мои элементы. Все, что я делаю, это выбор пуста, у которого уже есть ключ Primary, а затем я помещаю в него данные. Он работает (обновляет базу данных), но GridView не освежает. Мне нужно сначала перезапустить программу, чтобы увидеть мои обновленные данные.Обновление EF не обновляет GridView

Моя команда выполнения для обновления моей базы данных. Im в классе 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. Im в классе ViewModel

 public void ListeAktualisieren() 
     { 


      farbliste.ListeAktualisieren(db); 
      farbliste.Model = farbliste.Model.Concat(farbliste.Addlist).ToList(); 
      Model = farbliste.Model; 
      farbliste.Addlist.Clear(); 
     } 

Метод вызывает мой бизнес-список, который также получил метод Refreh. Чтение из моей базы данных здесь. Im в классе 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 которым не Освежающий измененные данные при обновлении, но показывает новые строки данных при вставке или удалении.

ответ

2

Вам нужны наблюдаемые коллекций и классы с реализованным INotifyPropertyChanged. Добавьте новый элемент в Observablecollection, вставив и поднимите свойство события, измененное изменением. Остальное должно быть сделано WPF.

Редактировать: SourceCollection для DataGrid должен быть Observablecollection.


Edit2: Для того, чтобы быть хорошим я ставлю результат замечания здесь ;-) Каждая строка DataGrid является элементом коллекции. Каждая ячейка одной строки прослушивает PropertyChangedEvent своего элемента (String является Casesensitive, поэтому будьте осторожны). Если получатель свойства не вызывается после свойстваchangedevent, привязка не получила событие. Этот фрагмент кода может помочь ASURE, что вы не вызываете с несуществующими строками:

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); 
     } 
    } 
} 
+0

У меня есть свойство OnPropertyChange в моей собственности. –

+0

Свойство PropertyChangedEvent должно достигнуть WPF-слоя, как ваше соединение с ViewModel в WPF? – Patrick

+0

Farbliste.cs и Farbe.cs - это класс CSLA, поэтому я не думаю, что необходим Observablecollection? –

0

Попробуйте добавить это к вашему разделе связывания ItemsSource = "{Binding Path = Модель, UpdateSourceTrigger = PropertyChanged"}

+0

уже сделал. забыл отредактировать его sry –

Смежные вопросы