2016-07-27 6 views
-1

Ich benutze mvvm Licht in meinem wpf-Anwendungsprojekt. Um das Ereignis zu hören, verwende ich EventToCommand von MVVM Light Bibliothek.MVVM Light e.Handled hält nicht den Status

Der Steuercode wie folgt aussieht:

<TextBox x:Name="Scannerport" 
      Grid.Row="1" 
      Grid.Column="1" 
      Margin="15,10,40,10" 
      MinWidth="100" 
      FontSize="40" 
      MaxLength="2" 
      PreviewTextInput="Scaleport_OnPreviewTextInput" 
      VerticalContentAlignment="Center" 
      HorizontalContentAlignment="Center" 
      Text="{Binding ScannerPort, UpdateSourceTrigger=PropertyChanged, ValidatesOnExceptions=True, NotifyOnValidationError=True}"> 
     <i:Interaction.Triggers> 
     <i:EventTrigger EventName="TextChanged"> 
      <cmd:EventToCommand Command="{Binding OnTextChanged}" 
           PassEventArgsToCommand="True" /> 
     </i:EventTrigger> 


     <rt:RoutedEventTrigger RoutedEvent="{x:Static Validation.ErrorEvent}"> 
      <cmd:EventToCommand Command="{Binding OnValidationError}" PassEventArgsToCommand="True" /> 
     </rt:RoutedEventTrigger> 

     </i:Interaction.Triggers> 
    </TextBox> 

Und im Ansichtsmodell der implementierten Code:

private void _OnTextChanged(TextChangedEventArgs e) 
    { 
     Debug.WriteLine(e.Handled); 
     if (ScalePort != 0 && ScannerPort != 0) 
     { 
     Disable = true; 
     return; 
     } 

     Disable = false; 
    } 

    private void _OnValidationError(ValidationErrorEventArgs e) 
    { 
     if (e.Action == ValidationErrorEventAction.Added) 
     { 
     Disable = true; 
     e.Handled = true; 
     } 
    } 

Wie Sie auf der zweiten Methode sehen kann, habe ich e.Handled = true und dann während des Debuggens auf erste Methode e.Handled ist immer noch false? Warum e.Handled nicht den Status für nächste Ereignisbehandler beibehalten?

enter image description here enter image description here

Antwort

1

Warum denken Sie es nicht gespeichert haben? Es sind nur verschiedene Ereignisse und sie kommunizieren nicht miteinander. So können Sie nicht e.Handled== true bei TextChanged Ereignis erhalten.

+0

So gibt es nicht "e.Handled" an den nächsten Handler übergeben? –

+0

@zero_coding ja tut es nicht. Validation und PropertyChanged sind nicht direkt verbunden. WPF-Fehler überprüfen und sie dem Objekt Binded Object (TextBox in diesem Beispiel) hinzufügen. Und propertychanged Ereignis sagen Ihnen, dass es einige Änderungen gibt. Probieren Sie [Validation.Errors Attached Property] (https://msdn.microsoft.com/en-us/library/system.windows.controls.validation.errors (v = vs.110) .aspx), wenn Sie möchten Überprüfen Sie den Fehler bei der Kontrolle. – Shakra

+0

Vielen Dank für Ihre Hilfe. –

1

Sie können e.Handled = true nicht mit verschiedenen Ereignissen wie dem, was Sie gerade tun, mischen.

Hören Sie sich das Ereignis PreviewTextInput an und setzen Sie e.Handled = true, damit das Ereignis TextChanged nicht erneut ausgelöst wird.

Verwandte Themen