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

标签 c# wpf events commandbinding

<分区>

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

最佳答案

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

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

后一种方法是绑定(bind)到组合框的值,并使用转换器创建将作为参数发送的类的特定对象。

XAML:

<StackPanel Name="StackPanel">
    <ComboBox Name="FirstComboBox"/>
    <ComboBox Name="SecondComboBox"/>
    <Button Command="{Binding YourCommand}">
        <Button.CommandParameter>
            <MultiBinding Converter="{StaticResource ComboBoxesToComboClassConverter}">
                <Binding ElementName="FirstComboBox" Path="SelectedValue"/>
                <Binding ElementName="SecondComboBox" Path="SelectedValue"/>
            </MultiBinding>
        </Button.CommandParameter>
    </Button>
</StackPanel>

转换器:

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

如果您使用 MVVM,每个 ComboBox 值都应该绑定(bind)到属性,因此您将在同一个类中同时拥有与按钮关联的命令和所需属性,因此无需传递任何内容。

关于c# - WPF 将多个参数传递给命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31628439/

相关文章:

c# - 延长查询超时时间

c# - IQueryable 没有 Count()?

c# - 随机访问流 Azure block 存储

javascript - 将 javascript 事件处理程序转换为 jquery

c# - 令人毛骨悚然的范围问题 - C# - Switch - 案例

wpf - 用于添加新实体的 MVVM WPF ViewModels

wpf - System.Windows.Application.OnLoadCompleted 从未达到

c# - 如何将控件绑定(bind)到对象属性?

wpf - 控制初始化顺序惨败

java - 从 GUI 代码外部请求用户输入,在这种情况下我是否需要事件或操作来与 GUI 进行通信?