У меня есть элемент управления Silverlight, в котором мой корневой объект ViewModel является источником данных. ViewModel предоставляет список карт, а также свойство SelectedCard, которое связано с раскрывающимся списком в верхней части представления. Затем у меня есть форма сортировки внизу, которая отображает свойства выбранной карты. Мой XAML выглядит как (сокращено для простоты):
<StackPanel Orientation="Vertical">
<ComboBox DisplayMemberPath="Name"
ItemsSource="{Binding Path=Cards}"
SelectedItem="{Binding Path=SelectedCard, Mode=TwoWay}"
/>
<TextBlock Text="{Binding Path=SelectedCard.Name}"
/>
<ListBox DisplayMemberPath="Name"
ItemsSource="{Binding Path=SelectedCard.PendingTransactions}"
/>
</StackPanel>
Я бы ожидал, что TextBlock и ListBox будут обновляться всякий раз, когда я выбираю новый элемент в ComboBox, но это не так. Я уверен, что это связано с тем фактом, что TextBlock и ListBox на самом деле привязаны к свойствам SelectedCard, поэтому он прослушивает уведомления об изменении свойств для свойств этого объекта. Но я бы подумал, что привязка данных будет достаточно умной, чтобы распознать, что родительский объект в выражении привязки изменился, и обновить всю привязку.
Следует отметить, что свойство PendingTransactions (привязанное к ListBox) загружается с отложенной загрузкой. Итак, когда я в первый раз выбираю элемент в ComboBox, я делаю асинхронный вызов и загружаю список и обновления пользовательского интерфейса для отображения информации, соответствующей выбранному элементу. Однако при повторном выборе элемента пользовательский интерфейс не меняется!
Например, если мой оригинальный список содержит три карты, я выбираю первую карту по умолчанию. Привязка данных пытается получить доступ к свойству PendingTransactions этого объекта Card и корректно обновляет ListBox. Если я выберу вторую карточку в списке, произойдет то же самое, и я получу список PendingTransactions для этой карточки. Но если я снова выберу первую карту, в моем интерфейсе ничего не изменится! Устанавливая точку останова, я могу подтвердить, что свойство SelectedCard обновляется правильно.
Как я могу заставить эту работу ???