2009-06-19 4 views
8

Я использую шаблон MVVM, и у меня есть текстовое поле в родительском окне и вы хотите отправить какой-то текст во всплывающее окно, которое появится в Textchanged.WPF CommandParameter в текстовом поле

Я пробовал использовать commandparameter, но он не работает для меня.

Пожалуйста, помогите ..

Благодаря Sharath

ответ

1

Что вы пробовали? Этот код работает для меня:

<Window x:Class="WpfApplication1.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Window1" Height="300" Width="300"> 
    <Window.CommandBindings> 
     <CommandBinding Command="Cut" Executed="CommandBinding_Executed" /> 
    </Window.CommandBindings> 
    <StackPanel> 
     <TextBox x:Name="textBox1" /> 
     <Button Command="Cut" 
       CommandParameter="{Binding Text,ElementName=textBox1}" 
       Content="Cut" /> 
    </StackPanel> 
</Window> 

С помощью этого обработчика событий:

private void CommandBinding_Executed(object sender, ExecutedRoutedEventArgs e) 
{ 
    MessageBox.Show(e.Parameter.ToString()); 
} 
+0

Я хочу использовать текстовое поле TextChanged или когда пользователь нажимает на текстовое поле ввода с клавиатуры. Не хотите кнопки. – 2009-06-19 08:49:52

+0

Если вы используете команду, вы должны использовать ICommandSource, например, кнопку. Команды не совпадают с обработчиками событий. –

22

Если я хочу, чтобы команда должна быть выполнена, если пользователь нажимает введите, я хотел бы использовать это. Обратите внимание, умное использование IsDefault Binding :-)

<TextBox x:Name="inputBox"/> 
<Button Command="{Binding CutCommand}" 
     CommandParameter="{Binding Text, ElementName=inputBox}" 
     Content="Cut" 
     IsDefault="{Binding IsFocused, ElementName=inputBox}" /> 

Если вы не хотите, чтобы кнопка была видна, вы можете установить его видимость разрушилась конечно. Я думаю, что он все равно выполнит команду, если вы нажмете enter.

+0

Большое спасибо. Если кнопка рушится, она не выполняется. Я установил ширину в 0 :-) – 2009-06-19 15:22:48

+0

Могу ли я сделать то же самое для listbox. Я имею в виду, когда я дважды нажимаю на элементы списка. Щелчок кнопки даже должен быть поднят. – 2009-06-22 08:04:37

+0

Не знаю. Я запустил эту команду вручную для кода. Я довольно новичок в xaml, хотя, кто знает. – Botz3000

2

Этот код работает для меня

<UserControl x:Class="Test" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      mc:Ignorable="d" 
      Height="Auto" Width="Auto"> 
    <UserControl.InputBindings> 
    <KeyBinding Key="Enter" Command="{Binding ScanCommand}" CommandParameter="{Binding Text, ElementName=tbBarcode}"/> 
    </UserControl.InputBindings> 
    <Grid Name="LayoutRoot"> 
    <TextBox x:Name="tbBarcode" Height="23"/> 
    </Grid> 
</UserControl> 
Смежные вопросы