【问题标题】:Multiple command parameters wpf button object多个命令参数 wpf 按钮对象
【发布时间】:2013-04-03 21:15:49
【问题描述】:

如何在WPF 中从Button 发送多个参数?我能够正确发送 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
}

【问题讨论】:

  • 如果您描述您想要的确切参数、它们的类型以及原因,我们可能会提供帮助。命令参数只有一个“绑定”,但根据您的需要还有其他选项,请提供更多信息。
  • 您可以在一个参数中转换多个参数,例如使用 object[](对象数组),但是您需要将所有这些参数转换为后面。还是有什么问题?
  • 嗨,J King,它会是另一个控件。一个文本框可能是一个很好的假设。
  • 我同意 reed 的回答,在不确切知道您需要文本框的情况下,最好的方法是在命令执行中使用视图模型中的绑定属性。否则,如果文本框是列表框、数据网格、组合框等的一部分,那么您可以传递控件的选定项,这将为您提供更多选项。

标签: c# wpf button mvvm icommand


【解决方案1】:

除了使用在你的类中定义属性的方法(我们称之为你的 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();
    }
}

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

【讨论】:

  • 您的转换器返回正确的值,但在附加到中继命令的方法中返回一个数组,但数组元素为空。
  • 您是否正确定义了静态资源?请参阅:msdn.microsoft.com/en-us/library/windows/apps/hh758287.aspx 了解更多信息,请关注 stackpanel 示例,您可以在其中了解如何定义静态资源。
  • 我面临同样的问题,除了值是空的,一切都很完美。
  • 替换返回值;返回 values.Clone();在 MyMultiConverter 的转换中,它应该可以正常工作。
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-13
    • 1970-01-01
    • 2016-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-19
    • 2016-09-10
    相关资源
    最近更新 更多