WPF – pass multiple parameters to a Command

public class SendCommand : ICommand
{
    public void Execute(object parameter)
    {
        var labels = ((object[]) parameter).OfType<Label>();
    }
 
    public bool CanExecute(object parameter)
    {
        return true;
    }
 
    public event EventHandler CanExecuteChanged = delegate {};
}
 
public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        DataContext = this;
        SendCommand = new SendCommand();           
    }
 
    public ICommand SendCommand { get; set; }
}
 
public class PassThroughConverter : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        return values.ToArray();
    }
 
    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

 

<Window x:Class="WpfApplication5.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:wpfApplication5="clr-namespace:WpfApplication5"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <wpfApplication5:PassThroughConverter x:Key="PassthroughConverter" />
    </Window.Resources>
    <Grid>
      <StackPanel>
        <Label Name="Greeting">Hello</Label>
        <Label Name="Farewell">Goodbye</Label>
        <Button Command="{Binding SendCommand}">Hit me
          <Button.CommandParameter>
            <MultiBinding Converter="{StaticResource PassthroughConverter}">
              <Binding Path="." ElementName="Greeting"></Binding>
              <Binding Path="." ElementName="Farewell"></Binding>             
            </MultiBinding>
          </Button.CommandParameter>
        </Button>
      </StackPanel>
    </Grid>
</Window>
posted @ 2014-12-03 15:23  马语者  阅读(1222)  评论(0编辑  收藏  举报