Приложение, которое я сейчас пишу, использует MVVM с шаблоном ViewModel-first. У меня есть XAML, подобный следующему:
<ContentControl Content="{Binding FooViewModel.BarViewModel.View, Mode=OneWay}"/>
Каждая виртуальная машина представляет собой DependencyObject
. Каждое свойство является DependencyProperty
. В зависимости от состояния приложения значение свойства BarViewModel
элемента FooViewModel
может измениться, что приведет к изменению значения свойства View
. К сожалению, когда это происходит, новый вид не отображается, а остается старый.
Это очень расстраивает. Я думал, что если какая-либо часть выражения пути изменится, привязка будет обновлена, но, похоже, это не так. Когда я использовал более поверхностные выражения пути, такие как FooViewModel.View
, и изменил значение свойства FooViewModel
, это обновило ContentControl
, к которому оно привязано, но не в этом случае.
Если ваше решение состоит в том, что я отказываюсь от ViewModel-first, это не вариант, хотя я ценю ваш совет. Я должен заставить это работать как есть.
ПОЯСНЕНИЕ
Это вопрос о привязке данных, а не о MVVM или о том, как его реализовать. Вы можете безопасно игнорировать аспекты MVVM, если это поможет вам подумать о проблеме или если у вас есть другое представление о том, как следует реализовать MVVM. Это большой существующий проект, в котором нельзя изменить шаблон проектирования MVVM. (Слишком поздно для этого.)
Итак, с учетом сказанного, правильный вопрос, на который нужно ответить, заключается в следующем:
Учитывая выражение пути привязки, в котором каждый элемент является DependencyProperty
, а конечное свойство является представлением, привязанным к ContentControl, почему изменение свойства в середине пути не приводит к обновлению привязки?