【问题标题】:Disable button if the user inputs an invalid email address - WPF如果用户输入了无效的电子邮件地址,则禁用按钮 - WPF
【发布时间】:2018-08-01 10:29:18
【问题描述】:

我有一个文本框,因此用户可以输入他们的电子邮件地址。我已经实现了 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

【问题讨论】:

  • 将IsValidEmailAddress()方法转为带有更改通知的属性(例如IsValidEmailAddress),并将Button的IsEnabled属性绑定到它。
  • 我已经成功实现了你的建议,谢谢,有没有办法让它在资源目录中工作?由于资源目录不知道 ​​IsValidEmailAddress 属性@Clemens

标签: wpf xaml mvvm idataerrorinfo


【解决方案1】:

您可以使用 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 );
 }

【讨论】:

  • 为什么选择 TextChanged?如前所述,绑定 IsValidEmailAddress 属性不是更好吗?
猜你喜欢
  • 1970-01-01
  • 2020-11-27
  • 2013-11-30
  • 1970-01-01
  • 1970-01-01
  • 2017-12-12
  • 2014-04-06
  • 1970-01-01
  • 2010-12-04
相关资源
最近更新 更多