none
INotifyPropertyChanged em Propriedades Virtuais RRS feed

  • Pergunta

  • Boa noite,

     

    Seguinte, estamos com um problema para implementar a interface INotifyPropertyChanged quando as propriedades estão marcadas como "Virtual".

     

    Classe de Exemplo:

      public class Pessoa : INotifyPropertyChanged
      {
    
        private string nome;
        public virtual string Nome 
        { 
          get { return nome; }
          set
          {
            nome = value;
            PropertyChanged(Nome, new PropertyChangedEventArgs("Nome"));
          }
        }
    
        private string sobrenome;
        public virtual string Sobrenome
        {
          get { return sobrenome; }
          set
          {
            sobrenome = value;
            PropertyChanged(this, new PropertyChangedEventArgs("Sobrenome"));
          }
        }
    
        private int idade;
        public virtual int Idade
        {
          get { return idade; }
          set
          {
            idade = value;
            PropertyChanged(this, new PropertyChangedEventArgs("Idade"));
          }
        }
    
        public event PropertyChangedEventHandler PropertyChanged;
      }
    

     

    O código compila tudo normalmente, mas quando altero alguma propriedade da classe Pessoa recebo uma Exception na chamada do evento PropertyChanged

    Object reference not set to an instance of an object.

     

    Obs: Estamos usando o NHibernate e não podemos perder a funcionalidade LazzyLoad!

     

    Como contornar esse erro?

    Existe alguam outra forma de fazer o Bind (Atualizar a UI automaticamente sem implemntar interface INotifyPropertyChanged) ?

     

    Att

    Evandro


    Não há medalha de ouro sem suor e não há sucesso sem trabalho e dedicação!
    segunda-feira, 1 de agosto de 2011 03:57

Respostas

  • A instancia deste objeto deve ser o Source do Binding, ou o data context do controle;

    Caso vc instancie a classe e altere alguma propriedade, vai dar erro pq em determinado momento do tempo de vida da aplicação o evento PropertyChanged ainda não foi assinado, para resolver isso, antes de disparar o evento faça a verificação:

     

    if(PropertyChanged!=null)

    {

      PropertyChanged(this, new PropertyChangedEventArgs("Idade"));

    );
    }


    Allan Tavares - Desenvolvedor Pleno - Spread Systems/Banco do Brasil
    • Marcado como Resposta Pimpão sexta-feira, 5 de agosto de 2011 13:23
    quinta-feira, 4 de agosto de 2011 19:58