如何从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
}
答案 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中的多个属性。然后该命令可以访问所有这些属性(因为它在同一个类中),根本不需要命令参数。