В приложении MVFM WPF у меня есть представление Master-Detail, которое используется для управления сигналами тревоги.В представлении AlarmDetails у меня есть несколько свойств, которые устанавливаются через элементы управления ComboBox.Одним из них является «Источник тревоги», и эти источники можно изменить в другом представлении (SourcesView), тем самым изменив содержимое комбинированного списка в AlarmDetailsView.
Способ передачи данных относительно прост:
- Источник добавляется в коллекцию в SourcesView
- Сообщение отправляется из SourcesView и принимается всеми AlarmDetailsViewModel
- Коллекция Sources в каждой AlarmDetailsViewModel изменяется соответствующим образом, и поскольку она являетсяObservableCollection уведомляет каждую цель привязки об изменении
- . AlarmDetailsView имеет свой DataContext, установленный на выбранную AlarmDetailsViewModel, таким образом, свойство ItemsSource его ComboBox с источниками обновляется (я вижу это с использованием фиктивного преобразователя, в отладке я вижуобновленная коллекция передается в ItemsSource и содержит только что добавленный элемент)
- После всего этого, когда я перехожу на вкладку AlarmsView / AlarmDetailsView, элементы в комбинированном списке источников не отображаются.получите новый элемент.
- Когда я выбираю новый сигнал тревоги в главном списке и выбираю исходный обратно, комбинированный список отображает новый элемент очень хорошо (когда я выбираю элемент в главном списке, DataContextсвойство AlarmDetailsView обновляется).
Я в недоумении с этим, я некоторое время обдумывал это.
У кого-нибудь есть идея?Любые предложения по отладке?
Спасибо,
Alex
РЕДАКТИРОВАТЬ: ComboBox, который не обновляется, находится в AlarmDetailsView, что означает, что он используется для установки свойстваОбъект тревоги (его Источник, а именно).Надеюсь, что это поможет.
РЕДАКТИРОВАТЬ 2: В дополнение к ответу ниже, другое решение было использовать ObservableCollection вместо списка.По какой-то причине повышение события PropertyChange в List (как описано выше) вызвало ComboBox для обновления его ItemsSource, но не для добавления новых элементов в его раскрывающийся список.При использовании ObservableCollection нет необходимости вызывать событие propertychange, поскольку он сам управляет всем этим.