19

如何从Buttonin发送多个参数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
}
4

2 回答 2

32

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

所以回答你的问题:

1. MVVM 方法:

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

2. MultiBinding : (可以用 MVVM 方法愉快地生活)

将命令参数作为多绑定参数传递,如下所示:

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

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

于 2013-07-06T16:43:33.347 回答
15

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

您只能将一个参数作为CommandParameter.

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

于 2013-04-11T15:29:35.200 回答