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
Usare i servizi di Azure OpenAI e ChatGPT in ASP.NET Core con Semantic Kernel
Referenziare un @layer più alto in CSS
Eseguire query verso tipi non mappati in Entity Framework Core
Creazione di componenti personalizzati in React.js con Tailwind CSS
Installare le Web App site extension tramite una pipeline di Azure DevOps
Criptare la comunicazione con mTLS in Azure Container Apps
Sfruttare GPT-4o realtime su Azure Open AI per conversazioni vocali
Recuperare l'ultima versione di una release di GitHub
Aggiungere interattività lato server in Blazor 8
Gestire i dati con Azure Cosmos DB Data Explorer
Eseguire una ricerca avanzata per recuperare le issue di GitHub
Creare una libreria CSS universale: i bottoni