Параметр команды wpf из другого объекта
Мне интересно, как разметить XAML для следующего. У меня есть модель представления с объектом, основанным на ICommand
.
У меня есть форма с текстовым полем и кнопкой. Кнопка подключается к объекту ICommand
через Command="{Binding MyButtonInViewModel}"
.
То, что я хочу сделать, это установить для кнопки CommandParameter
равное тому, что есть в тексте текстового поля, например, для вызова "поиска", но, очевидно, не знаю, как перехватить элементы управления в представлении.
Ответы
Ответ 1
Следующий XAML должен работать, чтобы передать текст из TextBox в качестве параметра в вашу команду.
<TextBlock x:Name="searchBox" />
<Button Command="{Binding MyButtonInViewModel}"
CommandParameter="{Binding Text, ElementName=searchBox}"/>
Ответ 2
Вы можете сделать это, установив ElementName
в привязку.
Вот пример:
<TextBox x:Name="textBox"/>
<Button Content="Button"
Command="{Binding ButtonCommand}"
CommandParameter="{Binding ElementName=textBox, Path=Text}"/>
Ответ 3
Если вы привязываете собственно текстовое поле к параметру команды кнопки, а не только текстовое свойство текстового поля, вы можете манипулировать текстовым полем в своей модели просмотра, например, чтобы очистить свойство текста.
<TextBox x:Name="searchBox" />
<Button Command="{Binding MyButtonInViewModel}"
CommandParameter="{Binding ElementName=searchBox}" />
Просмотр кода модели
private void SearchStuff(TextBox searchBox)
{
//do stuff with searchBox.Text
searchBox.Text = "";
}
Возможно, это не очень удобно для этого примера, где вы, вероятно, хотите, чтобы текст поиска оставался отображаемым вместе с результатами поиска. Лучше для приложения регистрации или обмена сообщениями, где вы хотите, чтобы текст был "потреблен" при нажатии кнопки.