当文本相同时,文本框不更新
本文关键字:文本 更新 | 更新日期: 2023-09-27 18:17:16
我有一个TextBox
。TextBox
绑定了一个属性。每次在方框中输入字符时,都会设置该属性。太棒了!
现在我想在输入无效字符时删除它们。
例如:用户键入的@
和@
是不允许的,所以它将被删除(如string.replace("@", "");
.
这也很好。旧文本是"6378fj"。现在有人输入@
。新的文本,6378@fj
,将被发送到属性,@
将被删除(现在是6378fj
), OnPropertyChanged
将被触发。
现在TextBox从属性中获得新的值,但它现在的值与以前相同。@
仍然留在文本框中。这有点奇怪,只有当验证文本与原始文本相同时才有效。
是否有办法让文本框更新自己?我希望你明白我的意思,我的母语不是英语。谢谢。
我假设你正在替换属性的setter中的字符?如果绑定正在更新属性,则忽略该属性的PropertyChanged
事件。您需要在绑定完成更新属性后引发事件。一个简单的方法是使用Dispatcher.BeginInvoke
方法:
Application.Current.Dispatcher.BeginInvoke(new Action(() => OnPropertyChanged("TheProperty")));
您可能会发现通过处理PreviewTextInput
事件更容易对输入到TextBox
中的文本执行验证。这将允许您在提交给TextBox
之前检查新文本。如果希望防止编辑,可以在传递给事件处理程序的TextCompositionEventArgs
上使用e.Handled = true
。
愚蠢的问题,但你说你正在做string.Replace("@","")
。您记得将结果赋值给原始字符串,不是吗?我知道这是一个显而易见的问题,但我已经见过太多次了,在这里不能不提。:)
ie。myString = myString.Replace("@","");
为什么不拒绝像'@'这样的符号的输入?我想这比搜索这些符号和删除要容易得多。
在这种情况下,您可以使用PreviewTextInput
事件
String str1 = "Hello";
String str2 = "Hello";
bool ch = str1 == str2;