gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 10:13:35 26 4
gpt4 key购买 nike

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

 <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 中。

        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 上访问它们。任何代码帮助??

最佳答案

您可以尝试使用自定义 Converter 和 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; }
}

关于c# - 如何使用 MVVM 在 WPF 应用程序中的 InvokeCommandAction 中将多个参数作为 CommandParameter 传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12601684/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com