Несколько параметров команды объект кнопки wpf

как я могу отправить несколько параметров из 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
}

2 ответов


как я могу отправить несколько параметров из кнопки в wpf.

вы можете отправить только один параметр как CommandParameter.

лучшее решение, как правило, просто привязать TextBox и другие элементы управления для нескольких свойств в ViewModel. Команда будет иметь доступ ко всем этим свойствам (поскольку она находится в одном классе), без необходимости в параметре команды вообще.


кроме использования подхода определения свойств в вашем классе (назовем его Вашей 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.