Silverlight中的自定义验证

时间:2014-04-13 10:46:45

标签: wpf silverlight validation silverlight-4.0 silverlight-5.0

我使用Silverlight创建一个站点,并在注册用户时使用自定义验证。我想阻止使用相同用户名注册两个用户。我使用Entity FrameworkWCF RIA。 但是当我插入与先前注册的用户相同的用户名时,我的页面中不会显示错误。为什么呢?

这是我的代码:

//this code is for domain service MetaData

[CustomValidation(typeof(UserExistValidation),"UserNotExist")]
[Required(ErrorMessage = "username is required!")]
public string username { get;set; }

我的验证员:

public class UserExistValidation
{
    public static ValidationResult UserNotExist(string username)
    {
        JobDBEntities myDB = new JobDBEntities();
        var query = (from u in myDB.tblUsers where u.username == username select new { u.username }).SingleOrDefault();
        if (query == null)
        {
            return ValidationResult.Success;
        }
        else return new ValidationResult("this usename is existed!");
    }
}

这是我的xaml代码:

<TextBox Text="{Binding Path=username,Mode=TwoWay,ValidatesOnExceptions=True}" x:Name="txtusername"/> 

1 个答案:

答案 0 :(得分:0)

您似乎需要将ValidatesOnExceptions=True添加到Binding

<TextBox x:Name="UserNameInputElement"
       Text="{Binding Path=username, Mode=TwoWay, ValidatesOnExceptions=True}"/>

这会在验证错误时产生红色飞出。

[编辑] 我可以看到你从未提出PropertyChanged事件,这可能会阻止验证错误传播(只是一个模糊的想法,我不久前有类似的问题)。 如果您实施INotifyPropertyChanged并添加:

,它是否可以解决您的问题
public string username {
    get { return m_username; }
    set { m_username = value; RaiseUsernameChanged(); } }

private string m_username;

private void RaiseUsernameChanged()
{
    var h = PropertyChanged;
    if (h!=null) h(this,new PropertyChangedEventArgs("username"));
}

public event PropertyChangedEventHandler PropertyChanged;