Nelle mie ultime applicazioni WPF ho utilizzato una classe Singleton, che chiamo Model, per contenere tutta la logica della mia applicazione, come la lettura di file, la gestione delle informazioni, ecc.
Nelle viste WPF o Windows, chiamo solo i metodi di cui ho bisogno, quando ne ho bisogno: Model.Instance.GetProducts(string category);
Oltre ad avere sempre la stessa istanza, trovo questo conveniente perché posso chiamare qualsiasi metodo che voglio in qualsiasi finestra, e posso definire il modello in App.xaml come una risorsa statica e quindi fare i collegamenti di cui ho bisogno. Ad esempio, impostare Binding di un DataGrid su una ObservableCollection presente nel modello.
Cosa ne pensi di questo approccio? Alcuni anni fa all'università, lavorando con Windows Forms, lavoravamo con il pattern MVC, in cui il controller conteneva alcuni eventi che richiamavano metodi dal modello, e tali eventi sarebbero stati successivamente richiamati dalle Views.