我有TextBox
。 TextBox
绑定到属性。每次我在Box中输入一个字符时,都会设置该属性。这很完美!
现在我想在输入无效字符时删除它们。
例如:不允许用户键入@
和@
,因此会将其删除(类似string.replace("@", "");
。
这也很好。旧文本是,让我们说“6378fj”。现在有人输入@
。新文本6378@fj
将发送到媒体资源,@
将被删除(现在为6378fj
),OnPropertyChanged
将被解雇。
现在,TextBox从Property中获取新值,但它现在与之前的值相同。并且@
仍然保留在TextBox中。这有点奇怪,只有在验证文本与原始文本相同时才有效。
有没有办法让TextBox自行更新?我希望你知道我的意思,我不是母语为英语的人。感谢。
答案 0 :(得分:1)
我假设你要替换属性的setter中的字符?如果绑定正在更新属性,则忽略该属性的PropertyChanged
事件。绑定完成更新属性后,您需要引发事件。一种简单的方法是使用Dispatcher.BeginInvoke
方法:
Application.Current.Dispatcher.BeginInvoke(new Action(() => OnPropertyChanged("TheProperty")));
答案 1 :(得分:0)
通过处理PreviewTextInput
事件,您可以更轻松地对输入TextBox
的文字执行验证。这将允许您在将新文本提交到TextBox
之前检查它。如果您希望阻止编辑,可以在传递给事件处理程序的TextCompositionEventArgs
上使用e.Handled = true
。
答案 2 :(得分:0)
愚蠢的问题,但你说你正在做string.Replace("@","")
。您记得将结果分配回原始字符串,不是吗?我知道这是一个显而易见的问题,但我已经看过太多次了,不在这里提及它。 :)
即。 myString = myString.Replace("@","");
答案 3 :(得分:0)
为什么不要拒绝输入符号,如' @'?我认为它比搜索这些符号和删除它更容易......
在这种情况下,您可以使用PreviewTextInput
事件。
答案 4 :(得分:0)
String str1 = "Hello";
String str2 = "Hello";
bool ch = str1 == str2;