2013-04-11 83 views
14

如何从ButtonWPF发送多个参数?我能够正确地发送值为TextBox的单个参数。这是代码。多个命令参数wpf按钮对象

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 
} 
+0

如果您描述了您想要的确切参数,它们的类型以及原因,我们可能会提供帮助。命令参数只有一个“绑定”,但根据您的需要还有其他选项,请更多信息。 – 2013-04-11 15:30:25

+0

例如,您可以使用对象[](对象数组)对一个参数进行多个参数转换,但您需要将所有这些参数向后转换。或者有问题吗? – Master117 2013-04-11 15:38:48

+0

嗨J国王,它会另一个控制。一个文本框可以是很好的假设。 – 2013-04-11 16:19:24

回答

14

如何从按钮在WPF发送多个参数。

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

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

24

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

所以回答你的问题:

1 MVVM方法:

使用MVVM方法,并定义属性由你的看法绑定,并使用您的视图模型的命令这些属性,而不需要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(); 
    } 
} 

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

+2

您的转换器返回适当的值,但在附加到relay命令的方法中返回一个数组,但数组元素为null。 – 2014-03-06 03:28:05

+0

您是否正确定义了静态资源?请参阅:http://msdn.microsoft.com/en-us/library/windows/apps/hh758287.aspx 有关更多信息,请关注stackpanel示例,您可以在其中看到如何定义静态资源。 – 2014-03-06 08:35:29

+0

我面临同样的问题,除了值为空,一切都很完美。 – Amit 2014-10-05 14:10:08