WPF - MVVM - Textbox ficando fora de sincronia com a propriedade viewmodel
Eu tenho uma exibição do WPF com um TextBox, vinculando o campo de texto para um ViewModel com UpdateSourceTrigger definido como PropertyChanged. No setter de propriedade no ViewModel, tenho uma simples verificação para evitar que o texto exceda 10 caracteres:
<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");
}
}
}
Se o valor não estiver definido, ainda assim RaisePropertyChanged (que simplesmente dispara PropertyChanged).
O problema é que quando eu digito o 11º caractere na interface do usuário, não atualizo _Name. Eu disparo PropertyChanged, e posso ver o acessor get chamado e retorna a string com apenas 10 caracteres. No entanto, meu TextBox não reflete isso; ainda mostra a string com 11 caracteres.
Além disso, é que se no 11º caractere eu alterar o texto no setter para "ERROR", e a propriedade fire for alterada, o TextBox DOES atualizará para mostrar o texto alterado.
Então, por que, se eu alterar o texto no setter de volta para o valor anterior, a interface do usuário não reflete isso?
Eu sei que existem maneiras alternativas de lidar com caracteres máximos, mas por que isso não funciona?