Mi pregunta genérica es como dice el título, ¿es mejor cargar datos durante la construcción de ViewModel o después a través de algún manejo de evento cargado?MVVM cargar datos durante o después de la construcción de ViewModel?
Supongo que la respuesta es después de la construcción mediante el manejo de algún evento cargado, pero me pregunto cómo se coordina de forma más clara entre ViewModel y View.
Aquí hay más detalles acerca de mi situación y el problema particular que estoy tratando de resolver:
estoy usando el marco MVVM Light, así como la Unidad de DI. Tengo algunas Vistas anidadas, cada una vinculada a un ViewModel correspondiente. Los ViewModels están vinculados al DataContext del control de raíz de cada Vista a través de la idea ViewModelLocator que Laurent Bugnion ha puesto en MVVM Light. Esto permite encontrar ViewModels a través de un recurso estático y controlar la vida útil de ViewModels a través de un marco de inyección de dependencias, en este caso Unity. También permite que Expression Blend vea todo lo relacionado con ViewModels y cómo vincularlos.
De todos modos, tengo una Vista padre que tiene un ComboBox de datos a un ObservableCollection en su ViewModel. El elemento seleccionado de ComboBox también está vinculado (bidireccional) a una propiedad en ViewModel. Cuando la selección del ComboBox cambia, esto es para activar actualizaciones en otras vistas y subvistas. Actualmente estoy logrando esto a través del sistema de mensajería que se encuentra en MVVM Light. Todo esto funciona muy bien y como se esperaba cuando eliges diferentes elementos en el ComboBox.
Sin embargo, el ViewModel obtiene sus datos durante el tiempo de construcción a través de una serie de llamadas a métodos de inicialización. Esto parece ser solo un problema si quiero controlar lo que es el SelectedItem inicial de ComboBox. Utilizando el sistema de mensajería de MVVM Light, actualmente lo configuro donde el colocador de la propiedad SelectedItem de ViewModel es el que difunde la actualización y los otros ViewModels interesados se registran para el mensaje en sus constructores. Parece que actualmente estoy intentando establecer SelectedItem a través del ViewModel en el momento de la construcción, lo que no ha permitido que se construyan sub-ViewModels y se registren todavía.
¿Cuál sería la forma más limpia de coordinar la carga de datos y la configuración inicial de SelectedItem dentro del ViewModel? Realmente quiero seguir poniendo tan poco en el código subyacente de View como sea razonable. Creo que solo necesito una forma para que ViewModel sepa cuando las cosas se han cargado y que luego puede continuar cargando los datos y finalizando la fase de configuración.
Gracias de antemano por sus respuestas.
no se puede tener su evento Loaded llamar a un método en el modelo de vista? – Klinger
Sí, supongo que podría. Probablemente estoy más de pensarlo. Creo que mi vacilación con eso es que he podido enlazar todo hasta ahora declarativamente en el XAML. Establecí el DataContext y luego establecí los enlaces de miembros en un solo lugar. ¿Hay una manera limpia de continuar esto en XAML con el evento Loaded del control vinculado a un método de ViewModel? Por supuesto, tampoco creo que ViewModel deba tener parámetros de manejo de eventos específicos de la UI. – mkmurray