2013-02-28 2 views
0

Проблема Silverlight не уведомляет меня об исключениях, если я непосредственно нажимаю кнопку. Все в порядке, если я написал что-то в текстовом поле и удалил его.Проверка Silverlight не работает должным образом

У меня есть класс с именем UserLogin.

public class UserLogin 
    { 
     //--------------------------------------------------- 
     // Fields 

     private string _userName; 
     private string _password; 

     //---------------------------------------------------- 
     // Properties 

     public string Username 
     { 
      get 
      { 
       return _userName; 
      } 
      set 
      { 
       if (value.Length==0) 
       { 
        throw new Exception("You must enter Username"); 
       } 
       _userName = value; 
      } 
     } 

     public string Password 
     { 
      get 
      { 
       return _password; 
      } 
      set 
      { 
       if (value.Length==0) 
       { 
        throw new Exception("You must enter password"); 
       } 
       _password = value; 
      } 
     } 
    } 

И в XAML:

<StackPanel BindingValidationError="LoginStackPanel_BindingValidationError"> 
      <TextBox x:Name="UsernameTextBox" Text="{Binding Username, Mode=TwoWay, ValidatesOnExceptions=True, NotifyOnValidationError=True}"/> 
      <PasswordBox x:Name="PasswordBox" Password="{Binding Password, Mode=TwoWay,ValidatesOnExceptions=True, NotifyOnValidationError=True}"/> 
<Button x:Name="LoginButton" Content="Sign In" /> 
    </StackPanel> 

И вот это событие BindingValidationError. Я просто меняю фон объектов и настраиваю подсказку для них.

private void LoginStackPanel_BindingValidationError(object sender, ValidationErrorEventArgs e) 
     { 
      if (e.Action == ValidationErrorEventAction.Added) 
      { 
       if (e.OriginalSource is TextBox) 
       { 
        (e.OriginalSource as TextBox).Background = new SolidColorBrush(Colors.Yellow); 

        ToolTipService.SetToolTip((e.OriginalSource as TextBox), e.Error.Exception.Message); 
       } 
       else if (e.OriginalSource is PasswordBox) 
       { 
        (e.OriginalSource as PasswordBox).Background = new SolidColorBrush(Colors.Yellow); 

        ToolTipService.SetToolTip((e.OriginalSource as PasswordBox), e.Error.Exception.Message); 
       } 
      } 
      else if (e.Action == ValidationErrorEventAction.Removed) 
      { 
       if (e.OriginalSource is TextBox) 
       { 
        (e.OriginalSource as TextBox).Background = new SolidColorBrush(Colors.White); 

        ToolTipService.SetToolTip((e.OriginalSource as TextBox), null); 
       } 
       else if (e.OriginalSource is PasswordBox) 
       { 
        (e.OriginalSource as PasswordBox).Background = new SolidColorBrush(Colors.White); 

        ToolTipService.SetToolTip((e.OriginalSource as PasswordBox), null); 
       } 
      } 
     } 

ответ

0

Я нашел решение. Вот как я заставил textBox проверять исключения.

UsernameTextBox.GetBindingExpression(TextBox.TextProperty).UpdateSource(); 
Смежные вопросы