Как показать всплывающую подсказку о неверном вводе в текстовое поле - PullRequest
1 голос
/ 06 марта 2012

Я пытаюсь настроить проверку поля телефонного номера в приложении 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);
        }
    }

1 Ответ

1 голос
/ 06 марта 2012

Сначала вы захотите сделать так, чтобы ваш класс наследовал 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>
...