多个命令参数wpf按钮对象

时间:2013-04-11 15:27:37

标签: c# wpf button mvvm icommand

如何从Button WPF发送多个参数?我能够正确发送值为TextBox的单个参数。这是代码。

XAML

<TextBox Grid.Row="1" Height="23" HorizontalAlignment="Left" Margin="133,22,0,0"     Name="textBox1" VerticalAlignment="Top" Width="120" />
<Button Content="Button" Grid.Row="1" Height="23" Command="{Binding Path=CommandClick}" CommandParameter="{Binding Text,ElementName=textBox1}" HorizontalAlignment="Left" Margin="133,62,0,0" Name="button1" VerticalAlignment="Top" Width="75" />

Code behind

public ICommand CommandClick { get; set; }

this.CommandClick = new DelegateCommand<object>(AddAccount);

private void AddAccount(object obj)
{
    //custom logic
}

2 个答案:

答案 0 :(得分:26)

除了使用在您的类中定义属性的方法(让我们称之为您的ViewModel)由您的视图绑定之外,有时候(不常见)我们不想这样做,这是一个重要的工具在这些情况下要知道的是MultiBinding,所以为了完整起见,即使你对第一个选项感到满意,我也将介绍另一种方法。

所以回答你的问题:

<强> 1。 MVVM方法:

使用MVVM方法并定义视图绑定的属性,并在ViewModel的命令中使用这些属性,而无需CommandParameters。

<强> 2。 MultiBinding: (可以幸福地使用MVVM方法)

将命令参数作为Multi Binded参数传递,如下所示:

 <Button Content="MultiBindingExample" Command="{Binding MyCommand}">
     <Button.CommandParameter>
         <MultiBinding Converter="{StaticResource MyMultiConverter}">
             <Binding Path="..." ElementName="MyTextBox"/>
             <Binding Path="..." ElementName="MySomethingElse"/>
         </MultiBinding>
     </Button.CommandParameter>
 </Button>

使用IMultiValueConverter界面定义转换器:

public class MyMultiConverter: IMultiValueConverter
{
    public object Convert(object[] values, ...)
    {
        return values.Clone();
    }
}

并提取值: 只需将命令中的参数称为Object[],并按照与MultiBinding中相同的顺序使用参数。

答案 1 :(得分:15)

  

如何从wpf中的按钮发送多个参数。

您只能发送一个参数作为CommandParameter

更好的解决方案通常是将TextBox和其他控件绑定到ViewModel中的多个属性。然后该命令可以访问所有这些属性(因为它在同一个类中),根本不需要命令参数。