Frage

Ich benutze MVVM und mein Objekt implementieren idataErrorinfo. Wenn eine Eigenschaft festgelegt ist, führe ich benutzerdefinierte Validierungsmethoden aus, und wenn die Validierung erfolgreich ist, kehre ich String.EMPY zurück, wodurch die validierung.haserror auf false festgelegt wird. Wenn die Validierung fehlschlägt, wird das Haserror auf true eingestellt. Ich habe einen Stil, den ich für "erforderliche Steuerelemente" verwende (Steuerelemente, die die Validierung durchführen) und das Tooltip des Steuerelements für alles, was der Fehler ist, wie folgt ist:

<Style x:Key="RequiredControl" TargetType="{x:Type Control}" >
    <Style.Triggers>
        <Trigger Property="Validation.HasError" Value="true">
            <Setter Property="ToolTip" Value="{Binding (Validation.Errors), Converter={StaticResource ErrorConverter}, RelativeSource={x:Static RelativeSource.Self}}"/>
        </Trigger>
    </Style.Triggers>
</Style>

Und der Fehlerconverter:

public class ZynErrorContentConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var errors = value as ReadOnlyObservableCollection<ValidationError>;
        if (errors == null) return "";

        return errors.Count > 0 ? errors[0].ErrorContent : "";
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

Das Problem ist Folgendes: Der Benutzer betritt etwas Ungültiges ... und die Validierung. Haserror wird auf true gesetzt. Die Tooltip -aktualisiert, wie es soll. Wenn der Benutzer versucht, den Fehler zu korrigieren, aber einen Wert eingibt, der eine andere Art von Invalidierung verursacht, sollte der Tooltip die neue Fehlerzeichenfolge anzeigen, dies ist jedoch nicht der Fall. Der Fehler zeigt den gleichen Fehler aus dem ersten Fehler. Ich weiß, warum dies geschieht (glaube ich) ... weil der Auslöser nicht ausgelöst wird, weil die Validierung. Haserror ändert sich nie von True -> False -> Richtig.

Hat jemand Erfahrung damit oder einen Rat, wie der Abzug erzwingt?

War es hilfreich?

Lösung

Dies scheint die Antwort zu sein: IdataErrorinfo mit mehreren Fehlermeldungen für eine Eigenschaft

Grundsätzlich binden Sie an das aktuelle Element und verwenden einen ContentPresenter, um den Fehler anzuzeigen. Es hat für meinen Code funktioniert.

Andere Tipps

Ich glaube, ich habe das herausgefunden. Der Täter ist die Verwendung des Konverters. Ich hatte das gleiche Problem und der Problemcode -Snippet war:

<Setter Property="ToolTip"
        Value="{Binding RelativeSource={x:Static RelativeSource.Self}, 
                        Path=(Validation.Errors), 
                        Converter={StaticResource validationErrorsToStringConverter }}"/>

Ich ändere den Ausschnitt zu:

<Setter Property="ToolTip"
        Value="{Binding RelativeSource={x:Static RelativeSource.Self},
        Path=(Validation.Errors)[0].ErrorContent}"/>

und das Problem wurde gelöst.

Schlussfolgerung - Verwenden Sie keinen Konverter.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top