2016-06-21 10 views
0

Ich habe versucht, dies zu transformieren (von alten Anwendung) zu MVVM Muster, aber ich sehe nicht, wie ich es tun werde.MVVM fangen Textbox einfügen Ereignis

textBoxLoader.AddHandler(CommandManager.ExecutedEvent, new RoutedEventHandler(PasteFunction), true); 

    private void PasteFunction(object sender, RoutedEventArgs e) 
     {  
      if ((e as ExecutedRoutedEventArgs).Command == ApplicationCommands.Paste) 
      {    
       // verify that the textbox handled the paste command 

       textBoxLoader.IsEnabled = false; 
       List<string[]> MachineList = new List<string[]>(); 
       List<string> list = new List<string>(Regex.Split(textBoxLoader.Text, Environment.NewLine)); 
}} 

Wie kann ich dies reproduzieren und TextBox Einfügen Ereignis Befehl von WPF rufen? Ich kann erfolgreich binden Enter Key Ereignis, aber wie binde ich Einfügen Ereignis?

Im Folgenden ein Code-Snippet auf ist, wie ich ein iCommand in neuer MVVM bin Bindung (Enter-Taste Hörer)

<UserControl.InputBindings> 
     <KeyBinding Key="Enter" Command="{Binding ClickCommand}" CommandParameter="{Binding Text, ElementName=textBoxLoader}"/> 
    </UserControl.InputBindings> 
+0

dieses Themas Versuchen ... http://stackoverflow.com/questions/28346652/wpf-mvvm-how- to-handle-textbox-einfügen-event-in-the-viewmodel/28365540 # 28365540 – Peekay

Antwort

2

In Ansicht:

<TextBox Text="{Binding Text, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Width="120" Height="200"/> 

Im Hinblick Modell:

class MainWindowViewModel : BindableBase 
{ 
    private string text; 

    public string Text 
    { 
     get { return text; } 
     set { SetProperty(ref text, value); } 
    } 
} 

Auf diese Weise, wenn Sie den Text einfügen oder drücken Strg + V der Text-Wert wird aktualisiert und Property Ereignis angehoben. So können Sie den eingefügten Text in einem Textfeld identifizieren.

Wenn Sie Strg + V aus einem besonderen Grund identifizieren wollen, versuchen Sie dies:

void AssociatedObject_PreviewKeyDown(object sender, KeyEventArgs e) 
{ 
    if (Keyboard.Modifiers == ModifierKeys.Control && e.Key == Key.V) 
    { 
      // Your action 
    } 
} 
+0

seit seinem mvvm sollte ich keinen back code haben, wenn ich previewkeydown benutze, kann ich die Funktion verwenden, die ich oben gepostet habe: private void PasteFunction (Objekt Absender, RoutedEventArgs e). iahve, um zwischen View/View-Modell mit Icommand und Bindung an mich zu machen – Zwan

+0

Wenn Sie nicht mit der Propertychanged Sache auch zufrieden sind, dann versuchen Sie etwas wie das. http://stackoverflow.com/questions/28346652/wpf-mvvm-how-to-handle-textbox-paste-event-in-the-viewmodel ** Sie können nicht einen leeren Code hinter haben und erreichen, was Sie brauchen , es sei denn, Sie tun es mit Eigentum, das allein geändert wird. ** Sie können Ansichtsverwandten Code im Code immer haben.Es verletzt nicht das MVVM-Muster. Wie auch immer, geben Sie den obigen Link einen Versuch. Es hilft, den Befehl ** Einfügen ** an das Ansichtsmodell zu leiten. – ViVi

+0

year irealized Ich kann nicht auf Paste Befehl in reinem wpf-MV handeln, aber Sie haben mich darauf hingewiesen, nur Code zu corect nur auf propertyChanged.so ich brauche nicht einmal Pflege bei "Enter" oder "Ctrl + v". – Zwan

0

In MVVM die Textbox auf eine Eigenschaft auf der VM gebunden ist. Warum abonnieren Sie nicht einfach die Benachrichtigungseigenschaftsänderung der VM (könnte auf der VM selbst tatsächlich durchgeführt werden) und suchen Sie nach einer Änderung, die über diese gebundene Eigenschaft berichtet wird.

Sobald eine Änderungsbenachrichtigung gesendet wurde, die erforderliche Logik ausführen.

Beispiel

Dieses Arbeitsbeispiel wäre nicht in der realen Welt verwendet werden, weil die Arbeit in dem Setter von Name getan werden würde, zeigt, wie das Benachrichtigungs Ereignis abonnieren. Wenn Name geändert wird, erfasst die VM die Änderung vom Ereignis und FullName wird berechnet, und die geänderte Eigenschaft wird für FullName aus dem Abonnement ausgelöst.

C# 6 Codierung wird verwendet, kann aber in jeder anderen Version von C# neu geschrieben werden.

+0

hast du ein beispiel dafür? – Zwan

+0

@Zwan siehe Beispiel. – OmegaMan

Verwandte Themen