[Tip] Constructores estáticos para tus ViewModels [WIN8]

Aunque ya he hablado en alguna ocasión de esta característica, una de las grandes novedades de .NET 4.5 es la introducción de Async y Await para “facilitar” la escritura de código que tiene que ejecutarse de forma asíncrona.

Para el desarrollo de aplicaciones para la Store de Windows 8, es una de las cosas mas importantes que hay que tener en cuenta, y de hecho gran parte de la funcionalidad de la API del propio WINRT ya es asíncrona lo que nos facilita mucho la vida.

En este post, quiero hablaros de una cosa que es bastante importe a la hora de hacer nuestros desarrollos.

Bien, ni los constructores de una clase ni las propiedades pueden ser “calificados” como asíncronos.

Centrándonos en el apartado del constructor, probablemente nos gustaría invocar a algún método asíncrono para por ejemplo llenar una lista de elementos que se van a mostrar en pantalla. Bien, mi recomendación para subsanar esto, es la definición de un método estático al que calificaremos como “async” y dentro de dicho método invocaremos al constructor de nuestra clase, y a las acciones asíncronas de la misma. Para ilustrar esto os expongo un pequeño ejemplo:

   1:  public class MyViewModel : baseViewModel
   2:  {
   3:       public MyViewModel()
   4:      {
   5:   
   6:      }
   7:     private async Task LongTask()
   8:    {
   9:         await Task.Delay(10);
  10:     } 
  11:     public static async Task<MyViewModel> Create()
  12:     {
  13:          var vm = new MyViewModel();
  14:          await vm.LongTask();
  15:          return vm;
  16:   
  17:     }
  18:  }

¿Cómo lo asignamos al contexto de nuestra vista?

Vamos a utilizar el método OnNavigatedTo:

 protected override async void OnNavigatedTo(NavigationEventArgs e)
        {
            this.DataContext= await MyViewModel.Create();
        }

Espero que os resulte de utilidad.

 

Saludos

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *