2012-03-06 2 views
0

Я пытаюсь настроить проверку для номера телефона в приложении WPF с использованием MVVM. У меня есть текст текстового поля, но, похоже, он не выясняет логику, связанную с отказом ввода и всплывающей подсказкой. Мы ценим любые предложения.Как показать всплывающую подсказку о недопустимом вводе в текстовое поле

[Required] 
    public string PhoneNumber 
    { 
     get 
     { 
      return EntityPhone.PhoneNumber; 
     } 
     set 
     { 
      int intValue = 0; 
      if(!int.TryParse(value, out intValue)) 
      { 
//    ToolTip tt = new ToolTip(); 
//    tt.Content = "Invalid Character. Please enter a valid 10-digit number"; 
      } 
      EntityPhone.PhoneNumber = value; 
      NotifyOfPropertyChange(() => PhoneNumber); 
     } 
    } 
+3

прочитать: http://blogs.msdn.com/b/wpfsdk/archive/2007/10/02/data-validation-in-3-5.aspx – Bolu

ответ

1

Сначала вы хотите, чтобы ваш класс наследует IDataErrorInfo, который используется WPF для целей проверки.

public class MyClass : IDataErrorInfo 
{ 
    ... 

    #region IDataErrorInfo Members 

    string IDataErrorInfo.Error 
    { 
     get { return null; } 
    } 

    string IDataErrorInfo.this[string columnName] 
    { 
     get 
     { 
      if (columnName == "PhoneNumber") 
      { 
       // Validate property and return a string if there is an error 
       return "Some error"; 
      } 

      // If there's no error, null gets returned 
      return null; 
     } 
    } 
    #endregion 
} 

Далее, скажите ваши привязки, что она должна быть проверка значения, когда он изменяет

<TextBox Text="{Binding Path=PhoneNumber, ValidatesOnDataErrors=True}" ... /> 

И, наконец, создать шаблон проверки. Вот стиль/шаблон я обычно использую

<!-- ValidatingControl Style --> 
<Style TargetType="{x:Type FrameworkElement}" x:Key="ValidatingControl"> 
    <Style.Triggers> 
     <Trigger Property="Validation.HasError" Value="True"> 
      <Setter Property="ToolTip" Value="{Binding 
       Path=(Validation.Errors)[0].ErrorContent, 
       RelativeSource={x:Static RelativeSource.Self}}" /> 
     </Trigger> 
    </Style.Triggers> 
</Style> 
Смежные вопросы