如何在WPF应用程序中使用MVVM在InvokeCommandAction中将多个参数作为CommandParameter传递

我正在使用System.Windows.interactivity.dll以下列方式在我的ViewModel中获取鼠标事件。

       

并在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 HeaderList { get { return _headerList; } set { _headerList = value; base.OnPropertyChanged("HeaderList"); } } public ICommand MouseLeftButtonUpCommand { get; set; } public DesignTemplateViewModel() { string file = SessionHelper.FilePath; List columns = new List(); 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(); 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); } 

所以这里我需要传递多个对象,如生成此事件的Control,鼠标相关属性等。现在我传递单个参数,这段代码工作正常。 所以我的问题是如何从Xaml(View)传递多个参数并在此ViewModel上访问它们。 任何代码帮助?

我同意Aghilas。 这就是它的完成方式。 我改进了Aghilas的代码,以澄清遗漏的内容。 请注意,“i:InvokeCommandAction.CommandParameter”必须放在invokeCommandAction声明中。

                

您可以尝试使用自定义Converter and MultiBinding

       

变流器

 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(); } } 

参数

 public class FindCommandParameters { public string Property1 { get; set; } public string Property2 { get; set; } }