MultiBinding с MultiValueConverter не обновляется - PullRequest
8 голосов
/ 07 апреля 2011

похоже, у меня проблема с мультибиндингом.

Сценарий:
У меня есть окно с двумя датчиками и списком. Список содержит некоторые связанные с данными элементы, которые называются «записи». Запись имеет свойство под названием «дата».

Я просто хочу, чтобы в моем списке отображались записи, дата которых находится между двумя датами выбора даты.

Мой код xaml для привязки просмотра списка к записям и датам:

<ListView.ItemsSource>
  <MultiBinding Converter="{StaticResource EntriesFilterConv}"
                UpdateSourceTrigger="PropertyChanged">
    <Binding Path="Entries" UpdateSourceTrigger="PropertyChanged"/>
    <Binding ElementName="EntryFromDate" Path="SelectedDate"
             UpdateSourceTrigger="PropertyChanged"/>
    <Binding ElementName="EntryToDate" Path="SelectedDate"
             UpdateSourceTrigger="PropertyChanged"/>
  </MultiBinding>
</ListView.ItemsSource>

Однако это не работает. Мой конвертер вызывается при изменении SelectedDate, но никогда не вызывается при изменении записей.

При обычной привязке данных, например:

<ListView ItemsSource="{Binding Entries}">
  ...
</ListView>

Список обновляется нормально. Есть идеи?

Ответы [ 2 ]

10 голосов
/ 23 ноября 2013

После поисков по часам я нахожу простой и достойный ответ!Так как ObservableCollection вызывает не событие PropertyChanged, а CollectionChanged, нам просто нужно привязать Count коллекции, чтобы вызвать событие при изменении списка:

<MultiBinding Converter="{Resources:ListToStringConverter}">
    <Binding Path="List.Count" />
    <Binding Path="List" />
</MultiBinding>

Оригинальная информация об этой отлично работающей мультисвязке здесь: https://stackoverflow.com/a/10884002/817504

4 голосов
/ 07 апреля 2011

Я думаю, что это может быть вызвано следующим: если вы привязываетесь непосредственно к Entries, ListView будет прослушивать CollectionChanged события, но если такая привязка находится внутри MultiBinding, единственное, что может вызвать переоценку, можетбыть уведомлением PropertyChanged, которое может отсутствовать для свойства Entries в вашей модели.

Возможно, вы можете подписаться на событие CollectionChanged вашей коллекции и вызвать событие PropertyChanged или получить BindingExpression в вашем MultiBinding, чтобы вызвать обновление вручную.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...