Condividi tramite


Associazione dati, iniezione delle dipendenze e test unitari in WinUI

Questa serie di esercitazioni illustra come implementare il data binding, l'inserimento delle dipendenze e gli unit test con il modello di progettazione MVVM (Model-View-ViewModel) e MVVM Toolkit in un'app WinUI 3. Si basa sull'esercitazione Creare un'app WinUI e illustra come aggiornare i modelli di visualizzazione per sfruttare MVVM Toolkit e le differenze tra MVVM Toolkit e gli approcci MVVM tradizionali.

È possibile scaricare o visualizzare il codice per questa esercitazione dal repository GitHub.

In questa esercitazione si apprenderà come:

  • Comprendere le differenze tra MVVM Toolkit e gli approcci MVVM tradizionali.
  • Creare un progetto di libreria di classi separato per contenere ViewModel e servizi per migliorare la testabilità.
  • Implementare il data binding nell'app WinUI usando MVVM Toolkit.
  • Aggiungere AllNotesViewModel e NoteViewModel visualizzare modelli per sfruttare MVVM Toolkit.
  • Integrare l'iniezione delle dipendenze per gestire i ViewModels e i servizi.
  • Creare un progetto di unit test per testare ViewModels e i servizi.

Prerequisiti

Per completare questa esercitazione è necessario soddisfare i prerequisiti seguenti:

  • Visual Studio 2022 (versione 17.14 o successiva) o Visual Studio 2026 con il carico di lavoro Sviluppo di applicazioni WinUI installato.
  • Un progetto iniziale creato seguendo la procedura descritta nell'esercitazione Creare un'app WinUI . Se si ha già familiarità con l'esercitazione, è possibile scaricare il codice per iniziare da qui dal repository GitHub.

Che cos'è MVVM Toolkit?

MVVM Toolkit è una libreria moderna, leggera e veloce che consente di implementare il modello di progettazione MVVM nelle applicazioni .NET. Fa parte di .NET Community Toolkit e fornisce un set di strumenti e utilità per semplificare lo sviluppo di applicazioni basate su MVVM. MVVM Toolkit include funzionalità come:

  • ObservableObject: classe di base che implementa l'interfaccia INotifyPropertyChanged , in modo da poter creare modelli di visualizzazione che notificano la visualizzazione delle modifiche alle proprietà.
  • RelayCommand: implementazione del comando che consente di associare le azioni dell'interfaccia utente ai metodi nel modello di visualizzazione.
  • Messenger: un sistema di messaggistica che consente la comunicazione tra diverse parti dell'applicazione senza accoppiamento stretto.
  • Attributi: set di attributi che è possibile usare per generare codice boilerplate, ad esempio notifiche di modifica delle proprietà e implementazioni dei comandi.
  • Generatori di origine: generazione di codice in fase di compilazione che riduce boilerplate e migliora le prestazioni.
  • Supporto per l'inserimento delle dipendenze: supporto predefinito per l'inserimento delle dipendenze per gestire il ciclo di vita dei modelli e dei servizi di visualizzazione.

MVVM Toolkit è progettato per essere facile da usare e integrare nei progetti esistenti. È compatibile con varie piattaforme .NET, tra cui WinUI, WPF e .NET MAUI. È possibile consultare alcune app di esempio nel repository GitHub o nell'app di esempio in Microsoft Store per vedere come usare MVVM Toolkit in diversi scenari.

In che modo MVVM Toolkit viene confrontato con gli approcci MVVM tradizionali?

MVVM Toolkit riduce la quantità di codice ViewModel boilerplate e semplifica molti aspetti dell'implementazione del modello di progettazione MVVM rispetto agli approcci tradizionali. Ecco alcune differenze principali:

Caratteristica / Funzionalità Approccio MVVM tradizionale Approccio al toolkit MVVM
Notifica delle modifiche delle proprietà Implementare manualmente INotifyPropertyChanged in una classe base e generare PropertyChanged eventi per ogni proprietà. Eredita da ObservableObject e usa il metodo SetProperty per generare automaticamente eventi PropertyChanged.
Implementazione dei comandi Implementare ICommand manualmente per ogni comando. Usare RelayCommand per creare facilmente comandi con boilerplate minimo.
Messaging Implementare sistemi di messaggistica personalizzati o usare librerie di terze parti. Usare la classe predefinita Messenger per la comunicazione disaccoppiata tra i componenti.
Codice Boilerplate Scrivere codice ripetitivo per le notifiche di modifica delle proprietà e le implementazioni dei comandi. Usare attributi e generatori di origine per ridurre il codice boilerplate.
Performance Potrebbe verificarsi un sovraccarico delle prestazioni dovuto alla generazione di codice di reflection e runtime. I generatori di origine forniscono la generazione di codice in fase di compilazione, migliorando le prestazioni.
Supporto per l'iniezione delle dipendenze Richiede la configurazione e la gestione manuali dei cicli di vita del modello di visualizzazione. Supporto integrato per l'iniezione delle dipendenze per gestire i cicli di vita dei modelli di visualizzazione.
Curva di apprendimento Potrebbe richiedere una conoscenza più approfondita dei concetti e dei modelli MVVM. Più facile da imparare e usare con particolare attenzione alla semplicità e alla produttività.

Per altre informazioni sul modello di progettazione MVVM, consulta il binding dei dati di Windows e MVVM, Model-View-ViewModel (MVVM) e la documentazione di riferimento per l'interfaccia INotifyPropertyChanged.

App Note WinUI

L'applicazione finale creata in questa esercitazione è una versione ristrutturata dell'app WinUI Note dell'esercitazione Creare un'app WinUI . L'app consente agli utenti di creare, salvare e caricare più note. L'interfaccia utente dell'app originale rimane invariata, ma l'architettura aggiornata usa MVVM Toolkit per il data binding e la gestione dei modelli di visualizzazione.

AllNotesPage

Screenshot dell'app Note WinUI che mostra tre note salvate nella pagina AllNotesPage.

NotePage

Screenshot dell'app Note WinUI che mostra una pagina nota vuota nella visualizzazione NotePage.

Suggerimento

Quando si compilano app di Windows, spesso si fa riferimento alla documentazione di riferimento sulle API e alla documentazione concettuale. In questa esercitazione vengono visualizzati collegamenti inline nel testo e nei gruppi con etichetta "Altre informazioni nella documentazione:". Questi collegamenti sono facoltativi; non è necessario seguirli per completare l'esercitazione. Vengono forniti nel caso in cui si voglia prendere nota della posizione in cui trovare le informazioni necessarie quando si inizia a creare app personalizzate.