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?
So gibt es nicht "e.Handled" an den nächsten Handler übergeben? –
@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
Vielen Dank für Ihre Hilfe. –