2009-06-19 16 views
8

Sto utilizzando il pattern MVVM e ho una casella di testo nella finestra principale e voglio inviare del testo alla finestra popup che apparirà su Textchanged.WPF CommandParameter nella casella di testo

Ho provato a usare commandparameter ma non funziona per me.

Si prega di aiutare ..

Grazie Sharath

risposta

1

Che cosa hai provato? Questo codice funziona per me:

<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> 

Con questo gestore di eventi:

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

voglio usare testo TextChanged o quando l'utente fa clic entrano sul testo da tastiera. Non voglio premere. –

+0

Se si sta utilizzando un comando, è necessario utilizzare una risorsa ICommand come un pulsante. I comandi non sono gli stessi di gestori di eventi. –

22

Se voglio il comando da eseguire se l'utente preme Invio, mi piace usare questo. Si noti l'uso intelligente del IsDefault Binding :-)

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

Se non si desidera che il pulsante sia visibile, è possibile impostare la visibilità per crollato naturalmente. Penso che eseguirà comunque il comando se premi Invio.

+0

Grazie mille..Se il pulsante è compresso non viene eseguito. Ho impostato la larghezza su 0 :-) –

+0

Posso fare lo stesso per listbox. Intendo quando faccio doppio clic sugli oggetti della lista. Anche il clic del pulsante dovrebbe essere aumentato. –

+0

Non lo so. Ho invocato il comando manualmente in code-behind per quello. Sono piuttosto nuovo per xaml però, quindi chi lo sa. – Botz3000

2

Questo codice funziona per me

<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> 
Problemi correlati