当文本相同时,文本框不更新

本文关键字:文本 更新 | 更新日期: 2023-09-27 18:17:16

我有一个TextBoxTextBox绑定了一个属性。每次在方框中输入字符时,都会设置该属性。太棒了!

现在我想在输入无效字符时删除它们。

例如:用户键入的@@是不允许的,所以它将被删除(如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;