如果用户输入了无效的电子邮件地址,则禁用按钮-WPF

时间:2018-08-01 10:29:19

标签: wpf xaml mvvm idataerrorinfo

我有一个TextBox,因此用户可以输入其电子邮件地址。我已经实现了IDataErrorInfo接口,并弹出一条消息,告诉用户其电子邮件地址是无效格式。

如果用户输入了无效的电子邮件并按了提交按钮,则该电子邮件仍将保存到数据库中。如果用户输入了无效的电子邮件地址或显示错误消息,如何禁用该按钮?

// Check to see if email is valid
    #region
            private bool IsValidEmailAddress()
            {
                try
                {
                    MailAddress address = new MailAddress(EmailAddress);
                    return true;
                }
                catch
                {
                    return false;
                }
            }
    #endregion


        // Displays text error IDataErrorInfo
        private string ValidateEmailAddress()
        {
            if (String.IsNullOrWhiteSpace(EmailAddress))
                return "Email Address Cannot Be Empty";
            else if (!IsValidEmailAddress())
                return "Email Address Must Be A Valid Format";
            else return null;
        }

编辑:

如果电子邮件无效,则按下数据触发以停止按钮

<DataTrigger Binding="{Binding IsValidEmailAddress, ElementName=EmailAddressTextBox, UpdateSourceTrigger=PropertyChanged}" >
        <Setter Property="IsEnabled" Value="False" />
</DataTrigger>

显示无效地址的属性代码

#region
public bool isValidEmailAddress;
public bool IsValidEmailAddress
{
    get
    {
        try
        {
            MailAddress address = new MailAddress(EmailAddress);
            return true;
        }
        catch
        {
            return false;
        }
    }
    set
    {
        OnPropertyChanged("IsValidEmailAddress");
    }
}
#endregion

1 个答案:

答案 0 :(得分:0)

您可以使用text_changed事件,该事件可以将文本框的值传递给帮助程序类,以对其进行验证。像这样:

public static class ValidatorExtensions
{
   public static bool IsValidEmailAddress(this string s)
   {
    Regex regex = new Regex(@"^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$");
    return regex.IsMatch(s);
   }
 }

,然后在文本更改时:

private void myTextBox_TextChanged(object sender, EventArgs e)
 {
  bool result = ValidatorExtensions.IsValidEmailAddress( myTextBox.Text );
 }