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
Evitare la script injection nelle GitHub Actions
Ottimizzare le performance delle collection con le classi FrozenSet e FrozenDictionary
Gestire domini wildcard in Azure Container Apps
Supportare il sorting di dati tabellari in Blazor con QuickGrid
Effettuare lo stream della risposta in ASP.NET Core tramite IAsyncEnumerable
Elencare le container images installate in un cluster di Kubernetes
Gestire i null nelle reactive form tipizzate di Angular
Utilizzare HiLo per ottimizzare le insert in un database con Entity Framework
Usare un KeyedService di default in ASP.NET Core 8
Creare moduli CSS in React
Utilizzare la versione generica di EntityTypeConfiguration in Entity Framework Core
Evitare il flickering dei componenti nel prerender di Blazor 8