Como passar vários parâmetros como CommandParameter em InvokeCommandAction no aplicativo WPF usando MVVM

Eu estou usando System.Windows.interactivity.dll para obter eventos de mouse no meu ViewModel da seguinte maneira.

 <ListBox x:Name="listBox" ItemsSource="{Binding HeaderList}" DisplayMemberPath="Text" Width="Auto"   Margin="0,0,0,300" Height="Auto"  >
    <i:Interaction.Triggers>
            <i:EventTrigger EventName="MouseLeftButtonUp">
                <i:InvokeCommandAction Command="{Binding MouseLeftButtonUpCommand}" 
                         CommandParameter="{Binding SelectedItem, ElementName=listBox}"/>
        </i:EventTrigger>

        </i:Interaction.Triggers>
</ListBox>

e no ViewModel.

        public class Headers
    {
        public Headers()
        {
            IsSelected = false;
        }

        public string Text { get; set; }
        public ListBox Control { get; set; }
        public bool IsSelected { get; set; }
    }
   public ObservableCollection<Headers> HeaderList
    {
        get { return _headerList; }
        set
        {
            _headerList = value;
            base.OnPropertyChanged("HeaderList");
        }

    }
 public ICommand MouseLeftButtonUpCommand { get; set; }
 public DesignTemplateViewModel()
    {
        string file = SessionHelper.FilePath;
        List<string> columns = new List<string>();


        if (!string.IsNullOrEmpty(file))
        {
            ExcelHelper Excel = new ExcelHelper(file);
            columns = Excel.GetHeader();
        }
        else
        {
            columns.Add("Name");
            columns.Add("FatherName");
            columns.Add("MotherName");
            columns.Add("Class");
            columns.Add("RollNo");
            columns.Add("ModeOfTransport");
            columns.Add("Phone");
            columns.Add("Mobile");
        }
        HeaderList = new ObservableCollection<Headers>();

        foreach (string column in columns)
        {
            HeaderList.Add(new Headers
            {
                Text = column,
            });
        }

        MouseLeftButtonUpCommand = new RelayCommand((item) => OnMouseLeftButtonUp((Headers)item));
    }
  private void OnMouseLeftButtonUp(Headers sender)
    {
        ListBox control = sender.Control as ListBox;
        DragDrop.DoDragDrop(control, sender.Text, DragDropEffects.Copy);
    }

Então, aqui eu preciso passar vários objetos, como controle que gerou este evento, propriedades relacionadas com o mouse, etc. Agora estou Passando parâmetro único e este código está funcionando bem. Então, minhas perguntas é que como pode passar vários parâmetros de Xaml (View) e acessá-los neste ViewModel. Qualquer código ajuda?

 Kevin DiTraglia26 de set de 2012 14:40
A resposta a esta pergunta provavelmente irá ajudá-lo muitostackoverflow.com/questions/1350598/…
 SST26 de set de 2012 14:48
Sim, eu já vi este link, mas sendo um novato eu não como implementar IMultiValueConverter e também minha classe RelayCommand. Então eu quero uma resposta mais específica.

questionAnswers(2)

Você pode tentar com personalizadoConverter and MultiBinding

<CommandParameter>
      <MultiBinding Converter="{StaticResource CustomConverter}">
       <Binding ElementName=".." Path=".."/>
       <Binding ElementName=".." Path=".."/>
      </MultiBinding>
</CommandParameter>

Conversor

class CustomConverter : IMultiValueConverter 
{
    public object Convert (object[] Values, Type Target_Type, object Parameter, CultureInfo culture) 
    {
        var findCommandParameters = new FindCommandParameters();
        findCommandParameters.Property1 = (string)values[0];
        findCommandParameters.Property1 = (string)values[1];
        return findCommandParameters;
    }
    public object[] ConvertBack(object value, Type[] targetTypes, object parameter,   System.Globalization.CultureInfo culture)
    {
       throw new NotImplementedException();
    }
}

Parâmetros

public class FindCommandParameters
{
  public string Property1 { get; set; }
  public string Property2 { get; set; }
}
 Aghilas Yakoub26 de set de 2012 15:04
Sim Shivank você adiciona este código
 SST26 de set de 2012 14:51
Você pode por favor especificar onde devo adicionar o código acima no meu código?
 SST27 de set de 2012 14:49
Não funcionou. Na verdade eu não posso adicionar <CommandParameter> dentro de <i: InvokeCommandAction> bloco de código
 SST26 de set de 2012 15:03
Não consigo adicionar o bloco <CommandParameter> no bloco de códigos <i: InvokeCommandAction>. Então, como pode fazer isso?

ghilas para esclarecer o que estava faltando. note que "i: InvokeCommandAction.CommandParameter" deve ser colocado dentro da declaração invokeCommandAction.

    <ListBox x:Name="listBox" ItemsSource="{Binding HeaderList}" DisplayMemberPath="Text" Width="Auto"   Margin="0,0,0,300" Height="Auto"  >
        <i:Interaction.Triggers>
            <i:EventTrigger EventName="MouseLeftButtonUp">
                <i:InvokeCommandAction Command="{Binding MouseLeftButtonUpCommand}">
                    <i:InvokeCommandAction.CommandParameter>
                        <MultiBinding Converter="{StaticResource XAMLResourceAddConverter}">
                            <Binding ElementName="listBox" Path="SelectedItem"/>
                            <Binding ElementName="listBox" Path="SelectedItem"/>
                        </MultiBinding>
                    </i:InvokeCommandAction.CommandParameter>
                </i:InvokeCommandAction>
            </i:EventTrigger>

        </i:Interaction.Triggers>
    </ListBox>

yourAnswerToTheQuestion