У меня есть таблица данных со столбцом шаблона, и в этом шаблоне есть текстовое поле. Он связан со свойством «Количество» объекта в коллекции, из которой состоит источник. Количество является целым числом. Когда я добавляю элемент в сетку данных, я добавляю обработчик события в событие PropertyChanged элемента:
EnteredPart.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(p_PropertyChanged);
Это прекрасно работает, когда пользователь вводит целое число в текстовое поле ... Срабатывает обработчик p_PropertyChanged, и я могу отключить кнопки и при необходимости изменить количество. Когда пользователь вводит нецелое число, обработчик не вызывается, я просто получаю красный контур вокруг текстового поля. Из-за этого я не могу отключить необходимые кнопки, когда это необходимо (их следует отключить, если количество не разрешено). Можно ли как-нибудь с этим что-то сделать?
РЕДАКТИРОВАТЬ: Я попытался изменить свойство Количество на строку, и это вызвало вызов обработчика измененного свойства при вводе нецелых значений. Однако затем я добавил проверку в текстовое поле, чтобы проверить это, и если метод Validate возвращает значение false, обработчик измененного свойства снова перестает работать. Есть ли вообще способ получать уведомления как о проверке, так и об изменении свойства ??
РЕДАКТИРОВАТЬ 2: Вот еще один случай этой проблемы у меня в другом месте. У меня есть форма для добавления / редактирования телефонных номеров. Текстовое поле номера телефона выглядит так:
<TextBox >
<TextBox.Text>
<Binding Path="Phone.Number">
<Binding.ValidationRules>
<local:PhoneValidationRule />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
После нажатия кнопки сохранения мне нужно проверить в моей модели просмотра, является ли число действительным, потому что если это не так, я не хочу запускать команду сохранения. Тем не менее, не похоже, что есть какой-либо способ сделать это, потому что если проверка не удалась, свойство Phone.Number имеет нулевое значение, и у меня нет возможности проверить, нужно ли мне запускать команду сохранения. Мне либо нужен доступ к состоянию ошибки (которое, как я думал, будет работать с помощью Validation.GetErrors, но не работает), либо к фактическому тексту в текстовом поле, который недоступен в модели представления.