none
WPF + MVVM - Passar parâmetros no Command RRS feed

  • Pergunta

  • Bom dia pessoal,

    Estou desenvolvendo uma aplicação em WPF utilizando MVVM, e estou
    passando por uma dificuldade.

    Tenho um DataGrid que exibe algumas informações, nesse DataGrid
    coloquei um ContextMenu e adicionei um Command para o MenuItem.
    Acontece que gostaria de passar um parâmetro, seja o valor de uma
    coluna ou a linha inteira do DataGrid para esse meu Command, mas não
    sei como fazer isso.
    Vi que tem a propriedade CommandParameter, mas não sei como utilizá-la
    passando um valor da linha selecionada do DataGrid.

    Alguém ai já utilizou passagem de parâmetros com WPF e MVVM, ou já viu
    como faz?

    Obrigado.

    terça-feira, 9 de agosto de 2011 16:44

Respostas

  • Pessoal, consegui resolver o problema.  \o/

    O que eu fiz:

    1. Criei uma propriedade na minha ViewModel com o tipo de um item da minha coleção que usava para fazer o Binding no DataGrid.
    2. Associei essa propriedade com a propriedade SelectedItem do DataGrid através do Binding.
    3. Ao clicar no MenuItem do ContextMenu aciono o comando e nele recupero a propriedade da ViewModel que foi preenchida ao selecionar o item do DataGrid.

    ficou algo parecido com isso o meu xaml:

            <DataGrid
                Name="dtgDados"
                ItemsSource="{Binding Path=ItemsColecao}"
                SelectedItem="{Binding Path=ItemColecao}">
                <DataGrid.Columns>
                    <DataGridTextColumn Header="Coluna 1" Binding="{Binding Path=Valor1}" />
                    <DataGridTextColumn Header="Coluna 2" Binding="{Binding Path=Valor2}" />
                </DataGrid.Columns>
                <DataGrid.ContextMenu>
                    <ContextMenu>
                        <MenuItem Header="Item 1" Command="{Binding Path=TesteCommand}"></MenuItem>
                    </ContextMenu>
                </DataGrid.ContextMenu>
            </DataGrid>

    []'s

    Edegilson S. Silva


    segunda-feira, 15 de agosto de 2011 21:13

Todas as Respostas

  • Pessoal, consegui resolver o problema.  \o/

    O que eu fiz:

    1. Criei uma propriedade na minha ViewModel com o tipo de um item da minha coleção que usava para fazer o Binding no DataGrid.
    2. Associei essa propriedade com a propriedade SelectedItem do DataGrid através do Binding.
    3. Ao clicar no MenuItem do ContextMenu aciono o comando e nele recupero a propriedade da ViewModel que foi preenchida ao selecionar o item do DataGrid.

    ficou algo parecido com isso o meu xaml:

            <DataGrid
                Name="dtgDados"
                ItemsSource="{Binding Path=ItemsColecao}"
                SelectedItem="{Binding Path=ItemColecao}">
                <DataGrid.Columns>
                    <DataGridTextColumn Header="Coluna 1" Binding="{Binding Path=Valor1}" />
                    <DataGridTextColumn Header="Coluna 2" Binding="{Binding Path=Valor2}" />
                </DataGrid.Columns>
                <DataGrid.ContextMenu>
                    <ContextMenu>
                        <MenuItem Header="Item 1" Command="{Binding Path=TesteCommand}"></MenuItem>
                    </ContextMenu>
                </DataGrid.ContextMenu>
            </DataGrid>

    []'s

    Edegilson S. Silva


    segunda-feira, 15 de agosto de 2011 21:13
  • Edegilson tem como você colocar o command que você fez na ViewModel?

     

    Estou com um problema parecido com o seu aqui também.

     

    Obrigado!

    terça-feira, 13 de setembro de 2011 14:20
  • @mvaraujo

    Me Command está assim:

     

    private ICommand _AlterarRotinaCommand;

    public ICommand AlterarRotinaCommand
    {

    get { return this._AlterarRotinaCommand; }

            set { this._AlterarRotinaCommand = value; }

    }

     

    this._AlterarRotinaCommand = new RelayCommand(new Action<object>(this.AlterarRotina));

     

    private void AlterarRotina(object param)

    {

           // Código aqui

    }

     

     

    quinta-feira, 15 de setembro de 2011 12:55