none
Acessar controle da window, dentro de outra classe RRS feed

  • Pergunta

  • Pessoal, bom dia.

    No meu aplicativo utilizo várias classes.

    Na minha window principal (wpf) tenho um busyIndicator (wpf extended toolkit).

    A partir de MainWindow.cs, chamo uma classe X q precisa controlar esse busyIndicator... e a partir da classe X, chamo outra classe Y q tb precisa controlar esse busyIndicator....

    Como posso acessar o busyIndicator da minha MainWindow a partir dessas outras classes?

    Obs.: queria algo mais elegante do q ter q ficar passando o busyIndicator em parametros de métodos...


    Se a resposta foi útil, por favor marque como útil. Leia a bíblia.


    • Editado Tianodraco sexta-feira, 12 de abril de 2013 11:54
    sexta-feira, 12 de abril de 2013 11:53

Todas as Respostas

  • Olá Tiano,

    Faça o seguinte,

    Na classe X (Controlador) crie uma propriedade privada de um objeto do mesmo tipo do BusyIndicator e ao instanciar passe como parâmetro no construtor.

    (Considero esta a forma mais elegante de se fazer... pois você passa o objeto como parametro uma unica vez e usa o objeto enquanto a instancia da ClasseX existir)

    Exemplo:

    // Código na MainWindow

    public void InicializarControlador() { ClasseX meuControlador = new ClasseX(this.BusyIndicator); meuControlador.Controlar(); }


    //ClasseX
    public Class ClasseX
    {
     private TBusyIndicator MyBusyIndicator{get;set;}
     public ClasseX(TBudyIndicator _busyIndicator)
     {
      this.MyBusyIndicator = _busyIndicator;
     }
     public void Controlar()
     {
      // Aqui você já tem a visibilidade que precisa em cima 
      // do objeto  que quer.
     }
    }

    Abraço!!!


    (Se a isto ajudou a resolver o problema, por favor, marque como resposta)


    sexta-feira, 12 de abril de 2013 13:19
  • A forma correta são através de eventos.

    Crie nas suas classes eventos de atualização de status. E no formulario crie tratadores de evento para essas mudanças de status.

    sexta-feira, 12 de abril de 2013 15:23
  • Danimar,

    Poderia dar um exemplo?

    Abraço!


    (Se a isto ajudou a resolver o problema, por favor, marque como resposta)

    sexta-feira, 12 de abril de 2013 15:50
  • Sim.

    public void InicializarControlador()
    {
    ClasseX meuControlador = new ClasseX();
    meuControlador.EstadoModificado += new EventHandler(TratarEvento);
    meuControlador.Controlar();
    }
    
    private void TratarEvento()
    {
       this.BusyIndicator = NovoEstado; 
    }


    public Class ClasseX { public event EstadoModificado; public ClasseX() { } public void Controlar() { // Aqui o estado modificou então lanço o evento. if(EstadoModificado!=null) EstadoModificado(); //Posso passar parametros tambem } }

    O código acima é um esboço, mas é nessa linha que funcionam eventos. Evite passar para classes objetos de interface, a não ser que sua classe seja especializada para trabalhar com elementos da interface.

    sábado, 13 de abril de 2013 14:45
  • Entendi...

    Desta forma ao invés de passar a referência de um objeto, você passa a "referência" um evento.

    Funciona também!!

    Abraço!!!


    (Se a isto ajudou a resolver o problema, por favor, marque como resposta)

    sábado, 13 de abril de 2013 17:23