La comunicazione tra View e ViewModel è sempre un argomento delicato da trattare. Rendere minimo l'accoppiamento non è facile. In caliburn micro possiamo utilizzare le coroutine, per comunicare con la View e cambiare tra uno stato visuale e l'altro.
Una coorutine è una classe che implementa l'interfaccia IResult
public interface IResult { event EventHandler<ResultCompletionEventArgs> Completed; void Execute(CoroutineExecutionContext context); }
L'interfaccia definisce un evento ed un metodo. È possibile trovare un implementazione base di questa interfaccia nella classe ResultBase. Quest'ultima è scaricabile assieme al codice sorgente di Caliburn.
Useremo questa classe per creare la nostra coroutine che cambia lo stato visuale di una View
public class VisualStateResult : ResultBase { private readonly string _stateName; private readonly bool _useTransitions; public VisualStateResult(string stateName, bool useTransitions = true) { _stateName = stateName; _useTransitions = useTransitions; } public string StateName { get { return _stateName; } } public bool UseTransitions { get { return _useTransitions; } } public override void Execute(CoroutineExecutionContext context) { if (!(context.View is Control)) throw new InvalidOperationException("la View deve essere un controllo"); var view = (Control)context.View; VisualStateManager.GoToState(view, StateName, UseTransitions); OnCompleted(); } }
Il cuore dell'implementazione è l'override del metodo Execute, che recuperata la View e utilizzando il VisualStateManager cambia lo stato visuale.
Infine è possibile utilizzare la classe appena creata avendo l'accartezza di farlo in un metodo che restituisce un IEnumerable.
public IEnumerable<IResult> Execute() { yield return new VisualStateResult("Loading"); }
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Un confronto tra Framework CSS: Foundation, Bulma, TailwindCSS e SemanticUI
Un confronto tra React, Angular, Vue.js e Svelte: Form e validazione
Offline first con Blazor e IndexedDB
Dichiarare una struct come record in C#
Code reviewers as code in GitHub
Impostare l'hostname di un'immagine docker per rendere il container da altri container in Visual Studio
Creare un job summary in una GitHub Action
Utilizzare proprietà di tipo DateOnly con EF Core 6
Le novità di .NET 6 e C# 10
Utilizzare i metodi Linq MinBy e MaxBy per semplificare le ricerche degli elementi minimi e massimi in liste di oggetti complessi con LINQ
Modificare una variabile d'ambiente di un deployment di Kubernetes
Eseguire uno scroll all'interno di una pagina Blazor
I più letti di oggi
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Eseguire una chiamata asincrona durante la validazione di una form in Blazor
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Produttività con ASP.NET Core 6
- Blazor PWA e Offline-First