C# WPF将多个参数传递给命令

C# WPF将多个参数传递给命令,c#,wpf,events,commandbinding,C#,Wpf,Events,Commandbinding,假设我们有两个组合框和一个按钮。单击按钮应将两个组合框的值传递给viewmodel的命令。如何获取两个组合框的值并将这两个值传递给命令?您可能知道,在MVVM模式中,可以使用{Binding…}语句将依赖项属性绑定到ViewModel。所以你应该加上这个 SelectedValue="{Binding ComboboxValue1, Mode=TwoWay}" 及 进入视图中的组合框定义(XAML)。之后,当用户更改其中的某些内容时,ComboxValue1和ComboxValue2属性将收到

假设我们有两个组合框和一个按钮。单击按钮应将两个组合框的值传递给viewmodel的命令。如何获取两个组合框的值并将这两个值传递给命令?

您可能知道,在MVVM模式中,可以使用
{Binding…}
语句将依赖项属性绑定到ViewModel。所以你应该加上这个

SelectedValue="{Binding ComboboxValue1, Mode=TwoWay}"


进入视图中的组合框定义(XAML)。之后,当用户更改其中的某些内容时,
ComboxValue1
ComboxValue2
属性将收到通知。现在,您可以在绑定到按钮的ViewModel中的command handler中使用这些值进行操作。

您可能知道,在MVVM模式中,您可以使用
{Binding…}
语句将依赖项属性绑定到ViewModel。所以你应该加上这个

SelectedValue="{Binding ComboboxValue1, Mode=TwoWay}"


进入视图中的组合框定义(XAML)。之后,当用户更改其中的某些内容时,
ComboxValue1
ComboxValue2
属性将收到通知。现在,您可以在绑定到按钮的ViewModel中的command handler中使用这些值进行操作。

如果两个组合框都放在同一个面板中,您可以发送对它的引用,并按它们的名称检索组合框。这是不可取的,因为您不应该在ViewModel中处理UI元素

<StackPanel Name="StackPanel">
    <ComboBox Name="FirstComboBox"/>
    <ComboBox Name="SecondComboBox"/>
    <Button Command="{Binding YourCommand}" CommandParameter="{Binding ElementName=StackPanel}"/>
</StackPanel>

在您使用MVVM的情况下,每个ComboBox值都应该绑定到属性,因此您将拥有与按钮关联的两个命令,和相同类中所需的属性,因此无需传递任何内容。

如果两个组合框都放在同一面板中,则可以发送对该面板的引用,并按其名称检索组合框。这是不可取的,因为您不应该在ViewModel中处理UI元素

<StackPanel Name="StackPanel">
    <ComboBox Name="FirstComboBox"/>
    <ComboBox Name="SecondComboBox"/>
    <Button Command="{Binding YourCommand}" CommandParameter="{Binding ElementName=StackPanel}"/>
</StackPanel>
在使用MVVM的情况下,每个ComboBox值都应该绑定到属性,因此您将在同一个类中同时拥有与button关联的命令和所需的属性,因此不需要传递任何内容

class Combo
{
    public string FirstComboBoxValue { get; set; }
    public string SecondComboBoxValue { get; set; }
}

class ComboBoxesToComboClassConverter: IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return new Combo()
        {
            FirstComboBoxValue = values[0].ToString(),
            SecondComboBoxValue = values[1].ToString()
        };
    }

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