WPF MVVM и вложенные представления со свойствами зависимости
-
05-07-2019 - |
Вопрос
У меня есть родительское представление, которое определяет дочернее представление в Xaml. Дочернее представление имеет DependencyProperty
, которое связано с ViewModel родительского представления. Однако это значение также необходимо для ViewModel дочернего представления.
<custom:Parent>
<custom:Child ChildId="{Binding ParentFooId}" ... />
</custom:Parent>
ChildId
реализован как свойство зависимости элемента управления ChildView
. Если для ChildViewModel
требуется ParentFooId
, каков правильный способ его получения в MVVM? Р>
Я не хочу преобразовывать DataContext
ChildView
в ChildViewModel
и устанавливать значение в OnChildIdChanged
обработчик ChildView
. Это не кажется мне MVVM-ишем.
Другой альтернативой, о которой я подумал, было создание нового ChildViewModel
со значением и его установка в качестве DataContext
в событии OnParentFooIdChanged
( в ParentViewModel
); но это тоже не совсем правильно, поскольку предполагается, что ViewModels не обращают внимания на View (и, следовательно, ничего не знают о DataContext
s).
Кажется, я упускаю что-то очевидное ...
Решение
Если я правильно понимаю вопрос, вам просто нужно создать модель дочернего представления в модели родительского представления, передав и сохранив ссылку на модель родительского представления. Таким образом, вы можете ссылаться на любое свойство модели родительского представления из модели дочернего представления и связываться с любым из них в дочернем представлении.
Другие советы
Если вы просто пытаетесь передать данные из свойства зависимостей в вашу модель представления, я бы использовал событие PropertyChangedCallback. Добавьте обработчик, который отправляет измененные данные в вашу модель представления. Возможно, я неправильно понимаю ваши намерения.