lunes, 10 de diciembre de 2012

WPF. Al declarar el DataContext a un control da error de referencia nula

Este es uno de esos errores “tontos” que provocan que pierdas un montón de tiempo mientras estás aprendiendo a trabajar con WPF.

Tengo la siguiente declaración que, cuando llega a cargar el datacontext del control ListView, me da un error de referencia de objeto nula.

public DetalleCliente(Clientes cliente)
{
     
DetalleClienteViewModel viewModel = new DetalleClienteViewModel(cliente);
     
this.DataContext = viewModel.Cliente;
      ListView.ItemsSource = viewModel.Suscripciones;
      InitializeComponent();
}

¿Has encontrado ya el problema?

Es facil cuando te alejas y empiezas a depurar en la mente:

1. Instancio la clase viewmodel.
2. A this, le digo que su datacontext es la propiedad Cliente de viewmodel.
3. A ListView le digo que el source de los item es la propiedad Suscripciones del viewmodel… de aquí no pasa!!

Espera, ListView es un control, y los controles se inicializan con la orden InitializeComponent(). Por lo cual estoy intentando asignar el datasource a un control que aún no ha sido instanciado, por lo cual me devuelve un error de objeto nulo.

Cambiando para que inicialice la página y sus controles se arregla todo.

public DetalleCliente(Clientes cliente)
{

      InitializeComponent();

      DetalleClienteViewModel viewModel = new DetalleClienteViewModel(cliente);
     
this.DataContext = viewModel.Cliente;
      ListView.ItemsSource = viewModel.Suscripciones;
}

Espero que sirva de ayuda.

No hay comentarios: