WPF MVVM e viste nidificate con proprietà di dipendenza
-
05-07-2019 - |
Domanda
Ho una vista padre che definisce una vista figlio in Xaml. La vista figlio ha un DependencyProperty
associato al ViewModel della vista padre. Tuttavia, tale valore è necessario anche per ViewModel della vista figlio.
<custom:Parent>
<custom:Child ChildId="{Binding ParentFooId}" ... />
</custom:Parent>
ChildId
è implementato come proprietà di dipendenza del controllo ChildView
. Se ChildViewModel
necessita di ParentFooId
, qual è il modo MVVM corretto per ottenerlo?
Non voglio trasmettere il DataContext
del ChildView
in un ChildViewModel
e impostare il valore in un OnChildIdChanged gestore del
ChildView
. Non mi sembra molto MVVM.
L'altra alternativa a cui ho pensato era di creare un nuovo ChildViewModel
con il valore e impostarlo come DataContext
nell'evento OnParentFooIdChanged
( nel ParentViewModel
); ma ciò non sembra del tutto corretto, dal momento che i ViewModel dovrebbero essere ignari della Vista (e quindi non sanno nulla di DataContext
).
Sembra che mi manchi qualcosa di ovvio ...
Soluzione
Se capisco correttamente la domanda, devi solo creare il modello di vista figlio all'interno del modello di vista padre, passando e mantenendo un riferimento al modello di vista padre. In questo modo è possibile fare riferimento a qualsiasi proprietà del modello di vista padre dal modello di vista figlio e collegarsi a entrambi nella vista di figlio.
Altri suggerimenti
Se stai semplicemente cercando di passare i dati da una proprietà di dipendenza al tuo modello di vista, utilizzerei l'evento PropertyChangedCallback. Aggiungi un gestore che invia i dati modificati al tuo modello di visualizzazione. Potrei fraintendere il tuo intento.