WPF MVVM Threadsafe forma de obtener List < Object > de ViewModel
Pregunta
Estoy tratando de acceder a una Lista en un modelo de vista de un trabajador en segundo plano, pero recibo errores porque estoy cruzando hilos ...
Este es el método del problema en el modelo de vista: (Recibo la excepción en la primera línea de la función (ventana SMMainWindow ...))
public static MainWindowViewModel GetMainWindowViewModel() {
SMMainWindow window = (SMMainWindow)System.Windows.Application.Current.MainWindow;
if (window != null) {
return (MainWindowViewModel)window.DataContext;
}
return null;
}
¿Alguna idea? Se agradecería un código de muestra
Solución
Ayuda enormemente si configura su ViewModel con una instancia de su Despachador de Windows. Si tiene esto, puede usar Dispatcher.Invoke para buscar o establecer elementos dentro del ViewModel.
Otros consejos
Si es Freezable, es posible que pueda congelar su ventana. Esto debería permitirle acceder.
El enfoque del despachador es probablemente una buena opción, pero siempre siento que esto es una violación (parece que ViewModel trata la UI demasiado de cerca), pero probablemente sea una preferencia personal.
Cuestiono tu enfoque aquí, sin embargo. ¿Hay una buena razón por la cual un ViewModel está tratando de hacer referencia a otro? Consideraría repensar este enfoque ... Generalmente, cuando las personas hacen esto, acceden a ViewModel cuando realmente deberían estar tocando el Modelo.