WPF MVVM y vistas anidadas con propiedades de dependencia
-
05-07-2019 - |
Pregunta
Tengo una vista principal que define una vista secundaria en Xaml. La vista secundaria tiene una DependencyProperty
que está vinculada al ViewModel de la vista primaria. Sin embargo, ese valor también es necesario para ViewModel de la vista secundaria.
<custom:Parent>
<custom:Child ChildId="{Binding ParentFooId}" ... />
</custom:Parent>
ChildId
se implementa como una propiedad de dependencia del control ChildView
. Si el ChildViewModel
necesita ParentFooId
, ¿cuál es la forma adecuada de MVVM de obtenerlo?
No quiero convertir DataContext
de ChildView
en un ChildViewModel
y establecer el valor en un OnChildIdChanged manejador del
ChildView
. Eso no me parece muy MVVM.
La otra alternativa en la que pensé era crear un nuevo ChildViewModel
con el valor y establecerlo como DataContext
en el evento OnParentFooIdChanged
( en el ParentViewModel
); pero eso tampoco parece del todo correcto, ya que se supone que los ViewModels son ajenos a la vista (y, por lo tanto, no saben nada acerca de las DataContext
s).
Parece que me falta algo obvio ...
Solución
Si entiendo la pregunta correctamente, solo necesita crear el modelo de vista secundaria dentro del modelo de vista primaria, pasando y manteniendo una referencia al modelo de vista primaria. De esa manera, puede hacer referencia a cualquier propiedad del modelo de vista principal desde el modelo de vista secundaria y vincularla en la vista secundaria.
Otros consejos
Si simplemente intenta pasar datos de una propiedad de dependencia a su modelo de vista, usaría el evento PropertyChangedCallback. Agregue un controlador que envíe los datos modificados a su Modelo de vista. Sin embargo, puedo estar malinterpretando tu intención.