我有一个形式简单的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