Несколько параметров команды 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.