none
System.NullReferenceException con ObservableCollection<T>. RRS feed

  • Pregunta

  • Hola,

    Necesito que alguien me aclare porque me falla el siguiente código, por favor.

    public sealed partial class MainPage : Page { public ObservableCollection<NamedColor> Colores { get; set; } public MainPage() { this.InitializeComponent(); } public class NamedColor { public string nom { get; set; } public Color Colore { get; set; } } private void ComboBox_Tapped(object sender, TappedRoutedEventArgs e) { foreach (var color in typeof(Colors).GetRuntimeProperties()) { Colores.Add(new NamedColor() { nom = color.Name, Colore = (Color)color.GetValue(null) }); } } }

    Estoy intentando rellenar un combobox con colores para utilizarlo en un Flyout y no entiendo porque obtengo un System.NullReferenceException (Object reference not set to an instance of an object.)

    Necesito que alguien me lo explique teniendo en cuenta que mis conocimientos de C# y de programación en general son limitados.

    Saludos y gracias de antemano,

    Miguel.


    Bufalo_Paciente

    viernes, 11 de diciembre de 2015 13:56

Respuestas

  • Estimado:

    Al declarar una variable de un tipo, si es una clase, tienes que instanciarla. Si no, la variable apunta a nulo.

    En tu constructor añade:

    Colores = new ObservableCollection<NamedColor>();

    y tu código va a funcionar OK. Probable te falte también

    DataContext = this;

    para que el datacontext de tu página apunte a sí misma y puedas bindear con "Colores".

    lunes, 14 de diciembre de 2015 12:04

Todas las respuestas

  • Estimado:

    Al declarar una variable de un tipo, si es una clase, tienes que instanciarla. Si no, la variable apunta a nulo.

    En tu constructor añade:

    Colores = new ObservableCollection<NamedColor>();

    y tu código va a funcionar OK. Probable te falte también

    DataContext = this;

    para que el datacontext de tu página apunte a sí misma y puedas bindear con "Colores".

    lunes, 14 de diciembre de 2015 12:04
  • Gracias Ivan. R.

    Parece ser que no acababa de entender el tema de instanciarla donde debía hacerlo. Pensaba que ya estaba instanciada pero solo la tenia declarada por lo que veo.


    Bufalo_Paciente

    lunes, 14 de diciembre de 2015 15:55