La mia applicazione WPF è strutturata utilizzando il pattern MVVM. ViewModels comunicherà in modo asincrono con un server e quando i dati richiesti verranno restituiti, verrà richiamato un richiamo nel ViewModel e farà qualcosa con questi dati. Questo verrà eseguito su un thread che non è il thread dell'interfaccia utente. A volte questi callback implicano lavoro che deve essere fatto sul thread dell'interfaccia utente, quindi ho bisogno del Dispatcher. Questo potrebbe essere cose come:È considerato una cattiva pratica che gli oggetti ViewModel mantengano il Dispatcher?
- Aggiunta di dati a un ObservableCollection
- comandi trigger Prism che impostare qualcosa da visualizzare nella GUI
- Creazione di oggetti WPF di qualche tipo.
Cerco di evitare quest'ultimo, ma i due primi punti qui ritengo siano cose ragionevoli da fare per ViewModels. Così; va bene avere ViewModels che mantiene il Dispatcher in grado di richiamare i comandi per il thread dell'interfaccia utente? O è considerata una cattiva pratica? E perché?
Ho dovuto fare lo stesso nei controller: il controller si iscrive all'evento Load della vista che crea e in quel punto prende un riferimento al dispatcher della vista. Questo è particolarmente utile per l'esecuzione di delegati che sono stati passati in giro. – slugster
Thx per la punta!Sto utilizzando un contenitore IoC e il contenitore IoC viene creato in App.xaml.cs. Presumo che venga eseguito nel thread dell'interfaccia utente, quindi il piano è quello di recuperare il dispatcher corrente nel momento in cui viene creato il contenitore IoC e aggiungerlo al contenitore. Resta da vedere se questo ha successo. – stiank81
Funziona perfettamente. Oppure puoi semplicemente usare Dispatcher.CurrentDispatcher in qualsiasi parth che sai essere eseguito dal thread dell'interfaccia utente. Come per es. i costruttori ViewModel - se questi sono costruiti nel thread dell'interfaccia utente. – stiank81