Utilizzare le coroutine di Caliburn Micro per pilotare il VisualStateManager

di Marco Leoncini, in Windows Phone,

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

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi