2011-12-08 32 views
0

我有一個TextBoxTextBox綁定到一個Property。每次我在Box中輸入一個字符時,該屬性都會被設置。這是完美的!當文本相同時TextBox不會更新

現在我想,當他們被鍵入以去除無效字符

例如:用戶輸入@@是不允許的,因此將被刪除(類似於string.replace("@", "");

這也適用。罰款。舊的文本,可以說「6378fj」現在有人類型@。新的文本,[email protected],將被髮送到該物業的@將被刪除(現在它6378fj)和OnPropertyChanged將被解僱。

現在TextBox從屬性中獲取新值,但現在它的值與以前相同。並且@仍然保留在The TextBox中。這有點奇怪,只有當驗證文本與原始文本相同時纔有效。

有沒有辦法讓TextBox自行更新?我希望你明白我的意思,我不是以英語爲母語的人。謝謝。

+3

請發表您的代碼 –

+3

請問您能分享一些代碼嗎? – reggie

+2

你能提供一些源代碼嗎?你是否在發射OnPropertyChanged之前將你的內部變量設置爲正確的值?你有沒有考慮過使用驗證器? – Markus

回答

1

我假設你正在替換屬性的setter中的角色?如果該屬性正在通過綁定進行更新,則該屬性的PropertyChanged事件將被忽略。綁定完成更新屬性後,您需要提升事件。一個簡單的方法來做到這一點是使用Dispatcher.BeginInvoke方法:

Application.Current.Dispatcher.BeginInvoke(new Action(() => OnPropertyChanged("TheProperty"))); 
0

您可能會發現在文本輸入到TextBox通過處理PreviewTextInput事件更容易執行驗證。這將允許您在提交TextBox之前檢查新文本。如果您希望阻止編輯,則可以使用傳入事件處理程序的TextCompositionEventArgs上的e.Handled = true

0

愚蠢的問題,但你說你在做string.Replace("@","")。你記得把結果分配回原來的字符串,不是嗎?我知道這是一個明顯的問題,但我已經看過很多次了,在這裏不提。 :)

ie。 myString = myString.Replace("@","");

0

爲什麼你不想拒絕像'@'這樣的符號輸入?我認爲這比搜索這些符號和它的刪除更容易...

在這種情況下,您可以使用PreviewTextInput事件。

0
String str1 = "Hello"; 
String str2 = "Hello"; 
bool ch = str1 == str2; 
相關問題