Mi aplicación WPF está estructurada utilizando el patrón MVVM. Los ViewModels se comunicarán de forma asíncrona con un servidor, y cuando se devuelven los datos solicitados, se activa una devolución de llamada en ViewModel, y hará algo con estos datos. Esto se ejecutará en un hilo que no es el hilo UI. A veces, estas devoluciones de llamadas implican trabajo que debe realizarse en el hilo de UI, por lo que necesito el Dispatcher. Esto podría ser cosas como:¿Se considera una mala práctica que los objetos ViewModel tengan el Dispatcher?
- Adición de datos a un ObservableCollection
- comandos de activación Prism que fijarán algo que se mostrarán en la interfaz gráfica de usuario
- Creación de objetos de WPF de algún tipo.
Intento evitar esto último, pero los dos primeros puntos aquí me parecen razonables para ViewModels. Asi que; ¿está bien que ViewModels mantenga el Dispatcher para poder invocar comandos para el subproceso de UI? ¿O esto se considera una mala práctica? ¿Y por qué?
he tenido que hacer lo mismo en los controladores - el controlador suscribe al evento de carga de la opinión de que crea, y en ese momento agarra una referencia al despachador de la vista. Esto es especialmente útil para ejecutar delegados que han sido pasados por alto. – slugster
¡Gracias por la propina!Estoy usando un contenedor IoC, y el contenedor IoC se creó en App.xaml.cs. Supongo que esto se ejecuta en el subproceso de interfaz de usuario, por lo que el plan es obtener el despachador actual en el punto donde se crea el contenedor de Io y agregarlo al contenedor. Queda para ver si esto es exitoso. – stiank81
Funciona a la perfección. O simplemente puede usar Dispatcher.CurrentDispatcher en cualquier parh que sepa que está siendo ejecutado por el hilo de UI. Como p. los constructores de ViewModel: si se están construyendo en el hilo de UI. – stiank81