WPF MVVM e visões aninhadas com propriedades de dependência
-
05-07-2019 - |
Pergunta
Eu tenho uma visão pai que define uma visão da criança no XAML. A visão da criança tem um DependencyProperty
Isso está vinculado ao viewModel da visão dos pais. No entanto, esse valor também é necessário para o ViewModel da visualização da criança.
<custom:Parent>
<custom:Child ChildId="{Binding ParentFooId}" ... />
</custom:Parent>
ChildId
é implementado como uma propriedade de dependência do ChildView
ao controle. Se o ChildViewModel
precisa ParentFooId
, qual é a maneira adequada do MVVM de obtê -lo?
Eu não quero lançar o DataContext
do ChildView
dentro de ChildViewModel
e definir valor em um OnChildIdChanged
manipulador do ChildView
. Isso não parece muito MVVM-ish para mim.
A outra alternativa que pensei era criar um novo ChildViewModel
com o valor e defina -o como o DataContext
no OnParentFooIdChanged
evento (no ParentViewModel
); Mas isso também não parece certo, já que os viewmodels devem ficar alheios à visão (e, portanto, não sei nada sobre DataContext
s).
Parece que estou faltando algo óbvio ...
Solução
Se eu entender a pergunta corretamente, você só precisa criar o modelo de visualização da criança no modelo de exibição pai, passando e mantendo uma referência ao modelo de exibição pai. Dessa forma, você pode fazer referência a qualquer propriedade do modelo de visualização pai do modelo de visualização da criança e se vincular à visualização da criança.
Outras dicas
Se você está simplesmente tentando passar dados de uma propriedade de dependência para o seu modelo de visualização, eu usaria o evento PropertyChangedCallback. Adicione um manipulador que envia os dados alterados ao seu modelo de visualização. Eu posso estar entendendo mal sua intenção.