Несколько параметров команды wpf button object

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

Ответы

Ответ 1

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

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

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

Ответ 2

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