我有一個形式簡單的WinForms應用程序,一些控件和這樣定義的業務對象:防止將無效文本框輸入綁定到業務對象屬性?
public class BusinessObject : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(PropertyChangedEventArgs e)
{
if (PropertyChanged != null)
{
PropertyChanged(this, e);
}
}
private string _phoneNumber;
public string PhoneNumber
{
get { return _phoneNumber; }
set
{
if (_phoneNumber == value)
{
return;
}
_phoneNumber = value;
OnPropertyChanged(new PropertyChangedEventArgs("PhoneNumber"));
}
}
在我的形式,我有一個通過綁定源綁定到******中國房地產的文本框和數據源更新模式設置爲OnPropertyChanged。這一切都按預期工作。在將文本分配給業務對象上的PhoneNumber屬性之前,我需要對文本進行一些驗證。我認爲我會在文本框的驗證事件處理程序中執行此操作,如果輸入無效,則顯示錯誤提供程序並設置e.Cancel = true。不幸的是,這並不能防止綁定到PhoneNumber屬性的無效輸入。是否有捷徑可尋?
由於您將更新模式設置爲OnPropertyChanged,這意味着數據會在每個擊鍵上被推送到對象。你的驗證邏輯如何處理?我的意思是,你不應該等到用戶在驗證之前完成輸入數字嗎? – 2012-04-05 00:12:40
你是對的。 :-(文本框的目的是爲用戶輸入一個未格式化的電話號碼(通過未格式化,我的意思是隻有數字,沒有+符號,破折號,parens等)我目前沒有做任何類型的輸入過濾keydown或按鍵,這樣他們就可以輸入ABC並且它會接受它,並且,正如你所指出的那樣,使用OnPropertyChanged,在我可以驗證它之前,該輸入會被推送到每個擊鍵上的對象上,我想我應該使用更新模式對此文本框的OnValidation? – user685869 2012-04-05 13:01:04