WPF - MVVM - Pole tekstowe zsynchronizowane z właściwością viewmodel
Mam widok WPF z TextBoxem, wiążąc pole tekstowe z ViewModel z UpdateSourceTrigger ustawionym na PropertyChanged. W ustawniku właściwości w ViewModel mam proste sprawdzenie, aby tekst nie przekroczył 10 znaków:
<TextBox Text="{Binding Name, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" />
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.DataContext = new MainViewModel();
}
}
public string Name
{
get { return _Name; }
set
{
if (_Name != value)
{
if (value.Length <= 10)
{
_Name = value;
}
RaisePropertyChanged("Name");
}
}
}
Jeśli wartość nie jest ustawiona, nadal RaisePropertyChanged (który po prostu uruchamia właściwość PropertyChanged).
Problem polega na tym, że gdy wpisuję 11 znak w interfejsie użytkownika, nie aktualizuję _Name. Odpalam PropertyChanged i widzę, że get accessor zostaje wywołany i zwraca łańcuch zawierający tylko 10 znaków. Jednak mój TextBox tego nie odzwierciedla; nadal wyświetla łańcuch zawierający 11 znaków.
Poza tym, jeśli na 11 znaku zmieniam tekst w ustawniku na „BŁĄD”, a właściwość ognia zmieniła się, aktualizacja TextBox DOES pokazuje zmieniony tekst.
Dlaczego więc, jeśli zmienię tekst w ustawniku z powrotem na poprzednią wartość, interfejs użytkownika nie odzwierciedla tego?
Wiem, że istnieją alternatywne sposoby obsługi max znaków, ale dlaczego to nie zadziała?