¿Es posible conectar Wire View y ViewModel usando un DataContext declarativo y una plantilla de datos?¿Se está conectando la MVVM View y ViewModel usando el DataContext declarativo para Design-Time y Data Template for Runtime?
Objetivo: Quiero conectar las vistas con un modelo de vista para el tiempo de diseño y otro en el tiempo de ejecución. Actualmente, el uso de un DataContext declarativo para una máquina virtual en tiempo de diseño y una máquina virtual especificada por la plantilla de datos para el tiempo de ejecución no se comporta como se esperaba.
Antecedentes - Hay una variedad de formas de alambre hacia arriba y una vista de modelo de vista entre ellas las siguientes:
A.) declarativa especifique el modelo de vista DataContext dentro de la vista XAML. Esta técnica es útil en Design-Time usando el constructor sin parámetros para pasar datos ficticios.
<UserControl.DataContext>
<my: BrowseAssetsViewModel />
</UserControl.DataContext>
B.) programación especifique el modelo de vista, vista y DataContext.
// …Setup code
BrowseAssetsViewModel viewModel = new BrowseAssetsViewModel(assetRegistry, domains);
BrowseAssetsView view = new BrowseAssetsView();
view.DataContext = viewModel;
Cuando se utiliza Enfoque B en combinación con el Método A, en tiempo de ejecución WPF anula el DataContext por defecto especificados en el Método A utilizando la versión de la ViewModel con el constructor parametrizado especificado en Approach B.
C.) Definir una plantilla de datos para la asociación View-ViewModel Al asociar una Vista y un ViewModel en App.XAML Application.Resources, WPF puede conectar la Vista correcta en función del tipo de un ViewModel.
<DataTemplate DataType="{x:Type vm: BrowseAssetsViewModel }">
<vw: BrowseAssetsView />
</DataTemplate>
Si una propiedad ViewModel se enlaza a un control de ContentPresenter, WPF podría conectar en marcha la vista correspondiente (en función del tipo del modelo de vista) y colocarlo dentro del ContentPresenter. Esto es útil en el escenario "ViewModel-first" donde se presenta ViewModel y WPF resuelve y cablea la vista correcta inspeccionando el tipo de ViewModel presentado.
Problema - Al utilizar este enfoque C en combinación con el Método A, WPF resuelve el punto de vista correcto, pero parece que a continuación, volver a consultar la vista, llamando al modelo de vista declarativa especificado a través del constructor sin parámetros (Método A) , anulando así la propiedad ViewModel existente.
Pregunta: ¿Existe alguna forma de utilizar estas técnicas (C y A) sin que A sobreescriba involuntariamente la propiedad C ViewModel?
¿Por qué especificó declarativamente un DataContext de ViewModel dentro del XAML de la vista si no desea que esa declaración tenga lugar? –
El objetivo es encontrar una técnica que admita tanto un modelo de tiempo ficticio ViewModels (A) como una resolución de DataTemplate (C) en tiempo de ejecución. –