2017-01-13 3 views
1

У меня довольно интересная проблема. У меня есть DataGrid в WPF, который выглядит как:Обновление DataGrid с использованием ICollectionView в WPF MVVM

<DataGrid ItemsSource="{Binding View, IsAsync=True, Mode = TwoWay}" 
         AutoGenerateColumns="False" 
         EnableColumnVirtualization="True" 
         EnableRowVirtualization="True" 
         VirtualizingStackPanel.VirtualizationMode="Standard" 
         VirtualizingStackPanel.IsVirtualizing="True"> 
    COLLUMNS 
</DataGrid> 

На данных в этой сетке я выполняющей операции Crud, но мне кажется, я не могу обновить вид после добавить или удалить операцию, он отлично работает, когда я обновить запись или фильтр Это.

Simple C# опса я пытался в модели представления: прочитанных:

public CommendationViewModel() 
    { 
     this._catalog = new CatalogContexct(); 
     this._commendations = this._catalog.Commendations.ToList(); 

     var commendation = new ListCollectionView(this._commendations); 
     this.CommendationView = CollectionViewSource.GetDefaultView(commendation); 

     this.AddCommand = new RelyCommand(AddEntity, param => this._canExecute); 
     this.EditCommand = new RelyCommand(EditEntity, param => this._canExecute); 
     this.UpdateCommand = new RelyCommand(UpdateEntity, param => this._canExecute); 
     this.RemoveCommand = new RelyCommand(RemoveEntity, param => this._canExecute); 

     this.NameCommand = new RelyCommand(Filter, param => this._canExecute); 
     this.CancelCommand = new RelyCommand(Cancel, param => this._canExecute); 
    } 

И добавить:

public void AddEntity(object obj) 
    { 
     if(string.IsNullOrEmpty(this.Name)) 
     { 
      MessageBox.Show("Brak nazwy do dodania"); 
      return; 
     } 
     var commendation = new Commendation() { Name = this.Name }; 
     this._catalog.Commendations.Add(commendation); 
     this._catalog.SaveChanges(); 

     var commendationRefresh = new ListCollectionView(this._catalog.Commendations.ToList()); 
     this.CommendationView = CollectionViewSource.GetDefaultView(commendationRefresh); 
     this.CommendationView.Refresh();    

     MessageBox.Show("Nowe źródło polecenia zostało dodane"); 
    } 

Как вы видите, я попытался обновить представление в команде надстройки, но это не сработало. Какие-либо предложения?

+0

Вы связали свойство ItemsSource объекта DataGrid с названием «Вид», но вы обновляете какое-либо свойство под названием «Co mmendationView». Вы должны обновить ту же точку зрения, к которой привязан DataGrid. – mm8

ответ

1

Привязать к CommendationView:

<DataGrid ItemsSource="{Binding CommendationView}" ... 

... и убедитесь, что сеттер этого свойства вызывает событие PropertyChanged:

private ICollectionView _commendationView; 
public ICollectionView CommendationView 
{ 
    get { return _commendationView; } 
    set { _commendationView = value; NotifyPropertyChanged(); } 
} 

Класс представления модели должны реализовать интерфейс INotifyPropertyChanged для этого для работы: https://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged(v=vs.110).aspx

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