如何将多个命令参数传递给按钮 WPF?

How can I pass multiple command parameters to a button WPF?

设置上下文:

我有一个包含多种数据类型的数据网格。对于每种类型,我都有一个自定义数据模板,用于详细信息以适合我的数据。在细节上,我有一个带有文本框和 2 个按钮的小表单。 objective是在点击按钮的时候获取我行的数据和文本框的内容。

目前,我已经用这些参数创建了一个 class,我正在尝试以这种方式将此 class 传递给我的命令参数:

<Button Content="Validate" Width="70" Command="{Binding Source={StaticResource btnVmValidateReserved}, Path=ButtonValidateReservedCommand}">
    <Button.CommandParameter>
        <model:ButtonValidateReservedCommandArgs Item="{Binding Data}" Message="{Binding Path=Text, ElementName=umMasterComment}"/>
    </Button.CommandParameter>
</Button>

这是我的 class :

public class ButtonValidateReservedCommandArgs : DependencyObject
{
    public static readonly DependencyProperty ItemProperty = DependencyProperty.Register("Item", typeof(object), typeof(ButtonValidateReservedCommandArgs));
    public object Item
    {
        get { return GetValue(ItemProperty); }
        set { SetValue(ItemProperty, value); }
    }

    public static readonly DependencyProperty MessageProperty = DependencyProperty.Register("Message", typeof(string), typeof(ButtonValidateReservedCommandArgs));
    public string Message
    {
        get { return (string)GetValue(MessageProperty); }
        set { SetValue (MessageProperty, value); }
    }
}

当我尝试使用绑定时,结果总是 null。但是当我尝试用随机文本来做时,它起作用了。

另外,当我尝试这样做时它起作用了:

<Button Content="Validate" Width="70" Command="{Binding Source={StaticResource btnVmValidateReserved}, Path=ButtonValidateReservedCommand}" CommandParameter="{Binding Data}"/>

但是,我需要我的 2 个论点,但我想不通。

如果你有任何想法有一个有效的绑定,或者甚至是另一个解决方案来传递我的 2 个参数,我会接受它。

谢谢

为了传递多个参数,您可以这样做:

<Button Command="{Binding YourCommand">
    <Button.CommandParameter>
        <MultiBinding Converter="{StaticResource CloneMultiConverter}">
             <Binding Path="Argument1"/>
             <Binding Path="Argument2"/>
        </MultiBinding>
    </Button.CommandParameter>
</Button>  

public class CloneMultiConverter : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        return values.Clone();
    }

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}  

private void YourCommand(object parameter)
{
    var values = (object[])parameter;
    var firstArgument = (argumentType)values[0];
    var secondArgument = (argumentType)values[1];
}