Как обновить пользовательский интерфейс из ViewModel с помощью ObservableCollection?

У меня есть список с элементами, связанными с ObservableCollection.

Теперь, изнутри viewModel, мне нужно вызвать обновление пользовательского интерфейса. У меня нет ссылки на список из моей модели просмотра.

Если я удалю или добавлю элемент из моего ObservableCollection, ui будет обновлен.

Основываясь на какой-то другой логике, мне нужно обновить интерфейс... но ObservableCollection - то же самое.

Как обновить пользовательский интерфейс без добавления или удаления элементов из моего ObservableCollection?

благодаря

Ответ 1

Если вам нужно изменить свой пользовательский интерфейс, потому что вы отредактировали элементы в своей коллекции, вам необходимо организовать для этих элементов интерфейс INotifyPropertyChanged. Если объекты в вашей коллекции имеют событие PropertyChanged, пользовательский интерфейс будет прослушивать это событие из отдельных элементов. (Если возможно, вы также можете изменить элементы в своей коллекции как DependencyObjects с DependencyProperties, которая выполняет ту же цель).

Если вам действительно нужно инициировать обновление пользовательского интерфейса, когда ничего о вашей коллекции не изменилось, способ сделать это - вручную поднять событие CollectionChanged. Это невозможно сделать с ObservableCollection<> как есть, но вы можете получить новую коллекцию из этого класса и вызвать protected OnCollectionChanged метод protected OnCollectionChanged из некоторого нового public метода.

Ответ 2

У меня была аналогичная проблема, когда я хотел изменить фон на элементе, но, очевидно, ни элемент, ни коллекция не изменились.

Это было достигнуто, позвонив:

CollectionViewSource.GetDefaultView(your_collection_name).Refresh();

Это обновило представление из модели представления без изменения коллекций