Gebunden WPF TextBox wird nicht aktualisiert-Wert, wenn die gebundene Eigenschaft erzwingt einige business-Regeln

Ich bin mit .NET 4.0. Ich habe einige sehr einfache code, der ermöglicht dem Benutzer, geben Sie eine Zahl zwischen 1 und 99.999 angegeben (inklusive). Ich habe einige Logik in der Property-setter, der verhindert, dass der neueste Wert wird angewendet, wenn es nicht entsprechen die business-Regeln (z.B. es ist keine Nummer oder die Nummer ist zu groß).

    public class MainViewModel : INotifyPropertyChanged
{
    #region Fields

    private string _text = string.Empty;

    #endregion //Fields

    #region Properties

    public string Text
    {
        get { return _text; }

        set
        {
            if (_text == value) return;

            if (IsValidRange(value))
            {
                _text = value;
            }

            OnPropertyChanged("Text");
        }
    }

    #endregion //Properties

    #region Private Methods

    private bool IsValidRange(string value)
    {
        //An empty string is considered valid.
        if (string.IsNullOrWhiteSpace(value)) return true;

        //We try to convert to an unsigned integer, since negative bill numbers are not allowed,
        //nor are decimal places.
        uint num;
        if (!uint.TryParse(value, out num)) return false;

        //The value was successfully parse, so we know it is a non-negative integer.  Now, we
        //just need to make sure it is in the range of 1 - 99999, inclusive.
        return num >= 1 && num <= 99999;
    }

    #endregion //Private Methods

    #region INotifyPropertyChanged Implementation

    public event PropertyChangedEventHandler PropertyChanged;

    [NotifyPropertyChangedInvocator]
    protected virtual void OnPropertyChanged(string propertyName)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
    }

    #endregion //INotifyPropertyChanged Implementation
}

Das problem habe ich ist, dass wenn der Wert nicht gültig ist und ich Sie einfach ignorieren Sie den Wert der TextBox an diese Eigenschaft nicht aktualisiert, um die änderung widerzuspiegeln, sondern Sie einfach behält den Wert, wie er eingegeben wurde. Hier ist, wie ich die Eigenschaft gebunden:

        <TextBox Grid.Row="0"
             Text="{Binding Path=Text, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"/>

Kann mir jemand sagen was ich falsch mache?

Ich habe gelesen, eine Menge von Fragen, die schien sehr ähnlich wie diese, aber keine der Antworten für mich gearbeitet. Die seltsame Sache ist, dass wenn ich nicht validieren, basierend auf zahlen, aber nur alle ändern " eingegebenen text in GROSSBUCHSTABEN, funktioniert es Prima. Es scheint nur nicht zu funktionieren, wenn ich versuche, Sie nicht, setzen Sie die Eigenschaft auf den neuen Wert.

InformationsquelleAutor Matt Zappitello | 2014-03-10

Schreibe einen Kommentar