Quando utilizziamo Caliburn Micro come framework per implementare il MVVM, molti degli eventi esposti dai controlli presenti nella View sono automaticamente associati ai metodi del ViewModel, mediante delle semplici naming convention.
I framework di presentazione sono in continua evoluzione, quindi è necessario un meccanismo flessibile per associare gli eventi ai metodi.
In Caliburn Micro è possibile usare l'Attached Property Message.Attach.
cal:Message.Attach="[Event NomeEvento] = [Action NomeMetodo($parametro)]"
La sintassi è semplice e l'unica particolarità è nella gestione del parametro speciale preceduto dal simbolo del dollaro.
Per evitare di utilizzare classi di presentazione all'interno del ViewModel, è possibile veicolare l'oggetto incapsulato dall'evento impostando il MessageBinder.
MessageBinder.SpecialValues.Add("$parametro", contex => { if (contex == null || contex.EventArgs == null) return 0; else { var args = contex.EventArgs as Tipo Evento; //logica per l'elaborazione dei dai dati all'interno della classe EventArgs return ...; } });
Tramite il MessangeBinder è possibile gestire gli argomenti passati dall'evento e restituirli dal ViewModel "depurato" dalle dipendenze del framework di presentazione.
In questo modo, ad esempio, possiamo avere un indice di una selezione come un semplice intero e non un oggetto come il ListBoxItem.
Il MessangeBinder va impostato in fase di configurazione dell'IOC container, prima o dopo la registrazione dei ViewModel.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Eseguire operazioni sui blob con Azure Storage Actions
Implementare il throttling in ASP.NET Core
Creare form tipizzati con Angular
Utilizzare le collection expression in C#
Utilizzare database e servizi con gli add-on di Container App
Eseguire le GitHub Actions offline
Potenziare Azure AI Search con la ricerca vettoriale
Utilizzare Tailwind CSS all'interno di React: primi componenti
Ottimizzare il mapping di liste di tipi semplici con Entity Framework Core
Load test di ASP.NET Core con k6
Hosting di componenti WebAssembly in un'applicazione Blazor static
Aggiungere interattività lato server in Blazor 8