WPF MVVM et vues imbriquées avec des propriétés de dépendance
-
05-07-2019 - |
Question
J'ai une vue parent qui définit une vue enfant dans Xaml. La vue enfant a un DependencyProperty
lié ??au ViewModel de la vue parent. Cependant, cette valeur est également requise par le ViewModel de la vue enfant.
<custom:Parent>
<custom:Child ChildId="{Binding ParentFooId}" ... />
</custom:Parent>
ChildId
est implémenté en tant que propriété de dépendance du contrôle ChildView
. Si ChildViewModel
a besoin de ParentFooId
, quelle est la méthode MVVM appropriée pour l'obtenir?
Je ne souhaite pas convertir le DataContext
du ChildView
en un ChildViewModel
et définir une valeur dans un OnChildIdChanged
gestionnaire de ChildView
. Cela ne me semble pas très MVVM.
L’autre solution envisageable a été de créer un nouveau ChildViewModel
avec la valeur et de le définir comme DataContext
dans l’événement OnParentFooIdChanged
( dans le ParentViewModel
); mais cela ne semble pas tout à fait correct non plus, car les modèles ViewModels sont supposés être inconscients de la vue (et ne connaissent donc rien des DataContext
s).
Il semble que je manque quelque chose d'évident ...
La solution
Si je comprends bien la question, il vous suffit de créer le modèle de vue enfant dans le modèle de vue parent, en passant et en conservant une référence au modèle de vue parent. De cette façon, vous pouvez référencer toute propriété du modèle de vue parent à partir du modèle de vue enfant et y associer l'une ou l'autre.
Autres conseils
Si vous essayez simplement de transmettre des données d'une propriété de dépendance à votre modèle de vue, j'utiliserais l'événement PropertyChangedCallback. Ajoutez un gestionnaire qui envoie les données modifiées à votre modèle de vue. Je peux toutefois mal comprendre votre intention.