如何使用 MVVM 在 WPF 应用程序中的 InvokeCommandAction 中将多个参数作为 CommandParameter 传递 [英] How to pass Multiple parameters as CommandParameter in InvokeCommandAction In WPF App Using MVVM
问题描述
我使用 System.Windows.interactivity.dll 通过以下方式在我的 ViewModel 中获取鼠标事件.
I am using System.Windows.interactivity.dll to get mouse events in my ViewModel in the following manner.
<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>
在 ViewModel 中.
and in 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);
}
所以在这里我需要传递多个对象,例如生成此事件的控件、鼠标相关属性等.现在我正在传递单个参数并且此代码工作正常.所以我的问题是如何从 Xaml(View) 传递多个参数并在这个 ViewModel 上访问它们.任何代码帮助??
So here I need to pass multiple objects such as Control that generated this event, Mouse related properties etc. Now I am Passing single parameter and this code is working fine. So My Questions is that how can pass Multiple parameters from Xaml(View) and access them on this ViewModel. Any code help??
推荐答案
你可以试试自定义Converter and MultiBinding
<CommandParameter>
<MultiBinding Converter="{StaticResource CustomConverter}">
<Binding ElementName=".." Path=".."/>
<Binding ElementName=".." Path=".."/>
</MultiBinding>
</CommandParameter>
转换器
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; }
}
这篇关于如何使用 MVVM 在 WPF 应用程序中的 InvokeCommandAction 中将多个参数作为 CommandParameter 传递的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!