TextBox не обновляется, если текст совпадает - PullRequest
0 голосов
/ 08 декабря 2011

У меня есть TextBox. TextBox привязано к свойству. Свойство будет устанавливаться каждый раз, когда я набираю символ в поле. Это прекрасно работает!

Теперь я хочу удалить недопустимые символы при их вводе.

Например: пользователь, набравший @ и @, не разрешен, поэтому он будет удален (что-то вроде string.replace("@", "");.

Это тоже отлично работает. Старый текст, скажем, «6378fj». Сейчас кто-то печатает @. Новый текст, 6378@fj, будет отправлен в собственность, @ будет удален (теперь его 6378fj) и OnPropertyChanged будет запущен.

Теперь TextBox получает новое значение из свойства, но теперь оно такое же, как и раньше. И @ все еще остается в TextBox. Это немного странно, и работает только тогда, когда проверенный текст совпадает с исходным текстом.

Есть ли способ разрешить самому обновлению TextBox? Надеюсь, вы понимаете, о чем я. Я не являюсь носителем английского языка. Спасибо.

Ответы [ 5 ]

1 голос
/ 08 декабря 2011

Я полагаю, вы заменяете символ в установщике свойства? Если свойство обновляется привязкой, событие PropertyChanged для этого свойства игнорируется. Вы должны вызвать событие после того, как привязка закончила обновление свойства. Самый простой способ сделать это - использовать метод Dispatcher.BeginInvoke:

Application.Current.Dispatcher.BeginInvoke(new Action(() => OnPropertyChanged("TheProperty")));
0 голосов
/ 08 декабря 2011
String str1 = "Hello";
String str2 = "Hello";
bool ch = str1 == str2;
0 голосов
/ 08 декабря 2011

Почему бы вам не запретить ввод символов типа '@'? Я думаю, что это будет проще, чем искать эти символы и удалять их ...

В этом случае вы можете использовать PreviewTextInput событие.

0 голосов
/ 08 декабря 2011

Глупый вопрос, но вы говорите, что делаете string.Replace("@",""). Вы помните, чтобы присвоить результат обратно к исходной строке, не так ли? Я знаю, что это очевидный вопрос, но я видел его слишком много раз, чтобы не упомянуть его здесь. :)

есть. myString = myString.Replace("@","");

0 голосов
/ 08 декабря 2011

Возможно, вам будет легче выполнить проверку текста, введенного в TextBox, обработав событие PreviewTextInput. Это позволит вам проверить новый текст, прежде чем он будет передан в TextBox. Если вы хотите запретить редактирование, вы можете использовать e.Handled = true для TextCompositionEventArgs, переданного в обработчик событий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...