Il Combobox WPF deve associare una raccolta alla sua ItemsSource e qualcosa a cui legare l'oggetto o il valore selezionato. Fino ad ora, ho incluso sia la collezione che le proprietà del valore selezionato che sto vincolando al ViewModel responsabile della vista che ospita il Combobox.
Ultimamente, ho esaminato come ho implementato MVVM nei miei progetti precedenti e ho notato alcune cose di cui non sono soddisfatto. Uno di questi è che se più viste richiedono lo stesso ComboBox, allora ogni ViewModel associato ha la propria copia della collezione. Stavo pensando che sarebbe stato meglio esporre la raccolta a livello di applicazione e fornire solo una proprietà per legare il valore selezionato in ogni ViewModel pertinente.
Il modo in cui vedo che funziona è avere un singleton ViewModel che viene tenuto in vita per tutta la durata dell'applicazione. Questo ViewModel avrebbe tutte le collezioni standard che non sono specifiche per singoli ViewModels.
Poiché sto utilizzando Entity Framework, avrebbe il proprio contesto, quindi le proprietà dell'elemento selezionato dovrebbero associarsi alla chiave esterna dell'entità anziché alla proprietà di navigazione poiché i vari ViewModels non condividono i contesti.
Da lì, potrei incapsulare le varie collezioni all'interno di un ResourceDictionary come un insieme di StaticResources, e quindi usarle per legare all'ArticoloSource di vari ComboBox in tutta l'applicazione.
La mia domanda è questa; Questo è pazzo / stupido? Ho insegnato a me stesso WPF / MVVM da una serie di fonti e non sono mai sicuro se mi sto allontanando da pratiche generalmente accettate.
Il mio pensiero dietro tutto ciò era che avere una sola fonte consentirebbe a più modelli di vista di avere un insieme sincronizzato di raccolte a cascata. Se cambio la raccolta in un punto, il resto mostrerebbe le stesse modifiche, poiché sono tutte legate a una fonte. Prima, avevo bisogno di un mediatore per mantenere la coerenza tra ViewModels.
Inoltre, fornirebbe una classe singleton semplice, centralizzata e collegabile per memorizzare le variabili con scope dell'applicazione, come l'utente attualmente connesso.
Quindi, c'è un difetto evidente in questo che potrei mancare? In passato, ho implementato il mio pattern MVVM senza alcuna convalida esterna. Funziona, con solo pochi dolori in crescita ... ma sono sicuro che avrebbe potuto trarre grandi benefici da qualche peer review.