locked
Duvida Command Button Code Behind RRS feed

  • Pergunta

  • Olá Pessoal!

    Estou com uma duvida na qual pensei que naum teria problemas. é o seguinte:

    Estou criando um botão no code behind, para ele aparecer em tempo de execução:

       Button btn = new Button();
       btn.Content = "Executar";
       btn.Width = 50;
       btn.Height = 20; 

    e adiciono num stackPanel:

    StackPanel1.Children.add(btn);

    Até ae tudo maravilha. A minha duvída agora é saber como colocar um command nesse botão!

    btn.command = ???????

    Alguém sabe como fazer?

    sexta-feira, 3 de setembro de 2010 14:26

Respostas

  • Miclei,

    Segue o código abaixo.

    // data binding com o ViewModel

    this.DataContext = seuViewModel;

     

    // criação do botão

    var button = new Button();

    button.Content = "Executar";

    button.Width = 50;

    button.Height = 20;

     

    // classe que representa o binding com o comando

    var binding = new Binding();

    binding.Path = new PropertyPath("MeuComando");

     

    // define binding

    button.SetBinding(Button.CommandProperty, binding);

     

    // adiciona botão no StackPanel

    seuStackPanel.Children.Add(button);

    Att.

    Ari C. Raimundo
    MCAD, MCTS
    http://araimundo.blogspot.com

     

    • Sugerido como Resposta Ari C. Raimundo sexta-feira, 10 de setembro de 2010 00:29
    • Marcado como Resposta Miclei sexta-feira, 10 de setembro de 2010 13:31
    terça-feira, 7 de setembro de 2010 01:37
  • Perfeito Ari! muito obrigado!
    • Marcado como Resposta Miclei quarta-feira, 8 de setembro de 2010 17:27
    quarta-feira, 8 de setembro de 2010 17:26

Todas as Respostas

  • Miclei,

     

    Esse "command", seria o evento certo?

     

    Faça assim...

        public MainPage()
        {
          InitializeComponent();
          
    
          Button btn = new Button();
          btn.Content = "Executar";
          btn.Width = 50;
          btn.Height = 20;
    
          //adicionando um evento
          btn.Click += new RoutedEventHandler(btn_Click);
    
          StackPanel1.Children.Add(btn);
        }
    
        private void btn_Click(object sender, RoutedEventArgs e)
        {
          MessageBox.Show("Clique do botão");
        }
      }
    

     

    Abraço,

     


    Ricardo Alves
    www.ricardoalves.me
    • Sugerido como Resposta RicardoAlves sexta-feira, 3 de setembro de 2010 18:34
    sexta-feira, 3 de setembro de 2010 18:34
  • Ricardo, até que funcionaria se a ação que eu queria fosse fixa. O problema é que essa ação é dinamica e depende do viewModel que ela tiver usando no tempo de execução.

    Por isso a utilização do Command. No XAML eu faria assim:

    <Button Name:"btn" Command="{Binding MeuComando}" Width="50" Heinght ="20"  </Button>

     

    Fazendo desse jeito, a ação "MeuComando" fica para o viewModel implementar.

    Agora o que eu queria fazer era criar esse botão no code behind e não no xaml.

          Button btn = new Button();
          btn.Content = "Executar";
          btn.Width = 50;
          btn.Height = 20;
          btn.Command = (como eu coloco o "{Binding Meu Commando}")????

     

    Att,

    sexta-feira, 3 de setembro de 2010 19:04
  • Olá Miclei, tudo bem?

     

    Bom imagino que você possua um Command, como o abaixo.

    class MeuCommand : ICommand
      {
        public bool CanExecute(object parameter)
        {
          throw new NotImplementedException();
        }
    
        public void Execute(object parameter)
        {
          throw new NotImplementedException();
        }
    
        public event EventHandler CanExecuteChanged;
      }
    

    Tente fazer da seguinte forma.

    var botao = new Button();
          botao.Command = new MeuCommand();
    

    Qualquer dúvida é só falar.

    Abraços.

    sexta-feira, 3 de setembro de 2010 22:47
  • Miclei,

    Segue o código abaixo.

    // data binding com o ViewModel

    this.DataContext = seuViewModel;

     

    // criação do botão

    var button = new Button();

    button.Content = "Executar";

    button.Width = 50;

    button.Height = 20;

     

    // classe que representa o binding com o comando

    var binding = new Binding();

    binding.Path = new PropertyPath("MeuComando");

     

    // define binding

    button.SetBinding(Button.CommandProperty, binding);

     

    // adiciona botão no StackPanel

    seuStackPanel.Children.Add(button);

    Att.

    Ari C. Raimundo
    MCAD, MCTS
    http://araimundo.blogspot.com

     

    • Sugerido como Resposta Ari C. Raimundo sexta-feira, 10 de setembro de 2010 00:29
    • Marcado como Resposta Miclei sexta-feira, 10 de setembro de 2010 13:31
    terça-feira, 7 de setembro de 2010 01:37
  • Perfeito Ari! muito obrigado!
    • Marcado como Resposta Miclei quarta-feira, 8 de setembro de 2010 17:27
    quarta-feira, 8 de setembro de 2010 17:26
  • Miclei,

    Favor então marcar a resposta. :-)

    Um abraço !

    Ari C. Raimundo
    MCAD, MCTS
    http://araimundo.blogspot.com

    sexta-feira, 10 de setembro de 2010 00:29