Что происходит, когда я повторно создаю коллекцию ObservableCollection - PullRequest
0 голосов
/ 10 января 2012

У меня есть ObservableCollection свойство, а также это свойство

 public ListCollectionView ListView
 {
    get
    {
      return (ListCollectionView)(CollectionViewSource.GetDefaultView(List));
    }
 }

со списком, являющимся коллекцией ObservableCollection

В WPF у меня есть элемент управления ListView, связанный со свойством ListView.

Итак, насколько я понимаю, если я изменю ObservableCollection в коде, это должно быть отражено в View.

Но что, если я просто сделаю List = new ObservableCollection<SomeType>(someElements)

Список в представлении вообще не обновляется. Есть ли способ заставить его обновляться в коде, если я делаю это MVVM?

Ответы [ 5 ]

2 голосов
/ 10 января 2012

Добавить еще одно уведомление об изменении для вида:

public ObservableCollection<...> List
{
    get {...}
    set
    {
        if (list != value)
        {
            list = value;
            OnPropertyChanged("List");
            OnPropertyChanged("ListView");
        }
    }
}
1 голос
/ 10 января 2012

Элемент управления привязывается к свойству ListView и прослушивает событие IPropertyChanged, чтобы он мог обновляться самостоятельно, если изменяется базовое представление. Однако он не может волшебным образом определить, что представление изменилось, когда вы изменили базовую коллекцию.

Прямым решением будет запуск PropertyChanged для свойства ListView сразу после изменения значения List.

1 голос
/ 10 января 2012

вам нужно вызвать событие измененного свойства для самого списка, либо сделайте свойство DependancyProperty или используйте INotifyPropertyChanged

1 голос
/ 10 января 2012

В этом случае вам придется реализовать INotifyPropertyChanged и запустить событие PropertyChanged для свойства ListView, чтобы заставить каркас обновлять привязку.Как правило, однако, вы хотите избежать повторного создания экземпляра и всегда обновлять один и тот же ObservableCollection.

1 голос
/ 10 января 2012

Вы должны вызвать событие PropertyChanged для ListView.

...