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