WPF Validation of Textbox, как должна выглядеть привязка? - PullRequest
2 голосов
/ 22 мая 2011

Я пытаюсь проверить текстовое поле в WPF.Я нашел несколько примеров в Интернете, и я собрал некоторые вещи.Но прямо сейчас все проверяется так, как если бы это было неправильно.Мне сказали, что это мое связывание, так как я не уверен, что связывать с тем, что я пришел сюда для некоторых разъяснений:)

Вот мой валидатор:

class TextRangeValidator : ValidationRule
    {
        private int _minimumLength = 0;
        private int _maximumLength = 0;
        private string _errorMessage;

        public int MinimumLength
        {
            get { return _minimumLength; }
            set { _minimumLength = value; }
        }

        public int MaximumLength
        {
            get { return _maximumLength; }
            set { _maximumLength = value; }
        }

        public string ErrorMessage
        {
            get { return _errorMessage; }
            set { _errorMessage = value; }
        }

        public override ValidationResult Validate(object value,
            CultureInfo cultureInfo)
        {
            ValidationResult result = new ValidationResult(true, null);
            string inputString = (string)value.ToString();
            if (inputString.Length < this.MinimumLength ||
                (
                 inputString.Length > this.MaximumLength))
            {
                result = new ValidationResult(false, this.ErrorMessage);
            }
            return result;
        }
    }

Вот мой xamlcode:

<TextBox Height="23" HorizontalAlignment="Left" Margin="118,60,0,0" Name="CreateUserCPRTextbox" VerticalAlignment="Top" Width="120" >
    <TextBox.Text >
        <Binding Path="Name" UpdateSourceTrigger="PropertyChanged" ValidatesOnDataErrors="true">
            <Binding.ValidationRules  >
                <validators:TextRangeValidator
                    ValidatesOnTargetUpdated="True"
                    MinimumLength="10"
                    MaximumLength="10"
                    ErrorMessage="CPR nummer ikke gyldigt" />
            </Binding.ValidationRules>
        </Binding>
    </TextBox.Text>
</TextBox>

Сейчас мое свойство привязки просто называется name, я пытался привязать его к CreateUserCPRTextbox.Text, но оно не работает.Как это работает?

1 Ответ

4 голосов
/ 22 мая 2011

Необходимо привязать его к источнику и пути, например, к следующему простому объекту:

public  class Class1
{
    public string Name { get; set; }
}

Объект можно создать, добавив его в окно своей коллекции ресурсов.Источник привязывается к объекту, а путь к его свойству [Name], которое в данном примере равно «0123456789».

<Window.Resources>
    <validators:Class1 x:Key="class1" Name="0123456789" />
</Window.Resources>

Наконец, вам необходимо привязать его источник к этому ресурсу Source = {StaticResourceclass1}

<Grid>
    <TextBox Height="23" HorizontalAlignment="Left" Margin="118,60,0,0" Name="CreateUserCPRTextbox" VerticalAlignment="Top" Width="120" >
        <TextBox.Text >
            <Binding Source="{StaticResource class1}" Path="Name" UpdateSourceTrigger="PropertyChanged" ValidatesOnDataErrors="true">
                <Binding.ValidationRules  >
                    <validators:TextRangeValidator ValidatesOnTargetUpdated="True" MinimumLength="10" MaximumLength="10" ErrorMessage="CPR nummer ikke gyldigt" />
                </Binding.ValidationRules>
            </Binding>
        </TextBox.Text>
    </TextBox>
</Grid>

Далее, вы можете поиграть с проверенным текстовым полем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...