WPF - MVVM - синхронизация текстового поля со свойством viewmodel
У меня есть представление WPF с TextBox, связывающее текстовое поле с ViewModel с UpdateSourceTrigger, установленным в PropertyChanged. В установщике свойств в ViewModel у меня есть простая проверка, чтобы текст не превышал 10 символов:
<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");
}
}
}
Если значение не установлено, я все еще RaisePropertyChanged (который просто запускает PropertyChanged).
Проблема в том, что когда я набираю 11-й символ в пользовательском интерфейсе, я не обновляю _Name. Я запускаю PropertyChanged и вижу, как вызывается метод доступа get, и он возвращает строку, содержащую всего 10 символов. Однако мой TextBox не отражает этого; он по-прежнему показывает строку из 11 символов.
Кроме того, если на 11-м символе я изменил текст в установщике на «ОШИБКА», а свойство огня изменилось, TextBox ОБНОВЛЯЕТСЯ обновляться, чтобы показать измененный текст.
Так почему же, если я верну текст в установщике обратно к предыдущему значению, пользовательский интерфейс не отразит это?
Я знаю, что есть альтернативные способы обработки макс символов, но почему это не сработает?