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 ...

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top