проблема привязки источника - PullRequest
0 голосов
/ 06 декабря 2010

В приложении MVFM WPF у меня есть представление Master-Detail, которое используется для управления сигналами тревоги.В представлении AlarmDetails у меня есть несколько свойств, которые устанавливаются через элементы управления ComboBox.Одним из них является «Источник тревоги», и эти источники можно изменить в другом представлении (SourcesView), тем самым изменив содержимое комбинированного списка в AlarmDetailsView.

Способ передачи данных относительно прост:

  1. Источник добавляется в коллекцию в SourcesView
  2. Сообщение отправляется из SourcesView и принимается всеми AlarmDetailsViewModel
  3. Коллекция Sources в каждой AlarmDetailsViewModel изменяется соответствующим образом, и поскольку она являетсяObservableCollection уведомляет каждую цель привязки об изменении
  4. . AlarmDetailsView имеет свой DataContext, установленный на выбранную AlarmDetailsViewModel, таким образом, свойство ItemsSource его ComboBox с источниками обновляется (я вижу это с использованием фиктивного преобразователя, в отладке я вижуобновленная коллекция передается в ItemsSource и содержит только что добавленный элемент)
  5. После всего этого, когда я перехожу на вкладку AlarmsView / AlarmDetailsView, элементы в комбинированном списке источников не отображаются.получите новый элемент.
  6. Когда я выбираю новый сигнал тревоги в главном списке и выбираю исходный обратно, комбинированный список отображает новый элемент очень хорошо (когда я выбираю элемент в главном списке, DataContextсвойство AlarmDetailsView обновляется).

Я в недоумении с этим, я некоторое время обдумывал это.

У кого-нибудь есть идея?Любые предложения по отладке?

Спасибо,

Alex

РЕДАКТИРОВАТЬ: ComboBox, который не обновляется, находится в AlarmDetailsView, что означает, что он используется для установки свойстваОбъект тревоги (его Источник, а именно).Надеюсь, что это поможет.

РЕДАКТИРОВАТЬ 2: В дополнение к ответу ниже, другое решение было использовать ObservableCollection вместо списка.По какой-то причине повышение события PropertyChange в List (как описано выше) вызвало ComboBox для обновления его ItemsSource, но не для добавления новых элементов в его раскрывающийся список.При использовании ObservableCollection нет необходимости вызывать событие propertychange, поскольку он сам управляет всем этим.

Ответы [ 2 ]

0 голосов
/ 06 декабря 2010

** РЕДАКТИРОВАТЬ **

Уродливое решение, но сработало для меня, если у кого-то есть лучшее решение, пожалуйста, поделитесь:)

Очистите коллекцию, уведомили GUI, добавили реальную коллекцию, уведомленнуюграфический интерфейс

0 голосов
/ 06 декабря 2010

Попробуйте использовать CollectionViewSource для обработки ваших привязок Master / Detail.

Вот пример

<Window.Resources>
    <CollectionViewSource x:Key="data" Source="{Binding}" />
<Window.Resources>

DataContext="{Binding CurrentItem, Source={StaticResource data}}"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...