Как указали Рэйчел и Хенк, именно так строятся правила валидации WPF. Если проверка не пройдена, значение не будет записано в свойство.
Что касается того, почему они решили построить его таким образом, то, вероятно, потому, что они хотят последовательного поведения в случае неудачной проверки. Иногда значение в представлении недопустимо (например, отрицательный возраст), но оно может быть записано в свойство. В других случаях он недопустим таким способом, который невозможно было бы записать в свойство (например, возраст «foo» не может быть преобразован в int). Это может сбить с толку, если поведение «записать значение в свойство, если это возможно».
Как и вы, я бы предпочел, чтобы мой ViewModel обновлялся по мере возможности, независимо от ошибок валидации. Бизнес-объекты - это другое дело , но "Fort Knox ViewModels" мне кажется странным, потому что неверный ввод не просто в порядке, он ожидается . Обычно в моей ViewModel я хочу знать «текущее значение», а не «последнее действительное значение». Это одна из причин, по которой мне не нравятся ValidationRules.