文本相同时TextBox不会更新

时间:2011-12-08 13:09:42

标签: c# wpf binding textbox

我有TextBoxTextBox绑定到属性。每次我在Box中输入一个字符时,都会设置该属性。这很完美!

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

例如:不允许用户键入@@,因此会将其删除(类似string.replace("@", "");

这也很好。旧文本是,让我们说“6378fj”。现在有人输入@。新文本6378@fj将发送到媒体资源,@将被删除(现在为6378fj),OnPropertyChanged将被解雇。

现在,TextBox从Property中获取新值,但它现在与之前的值相同。并且@仍然保留在TextBox中。这有点奇怪,只有在验证文本与原始文本相同时才有效。

有没有办法让TextBox自行更新?我希望你知道我的意思,我不是母语为英语的人。感谢。

5 个答案:

答案 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;