WPF验证文本框,绑定应该是什么样的?

时间:2011-05-22 10:58:44

标签: .net wpf validation xaml textbox

我正在尝试验证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;
        }
    }

这是我的xaml代码:

<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 个答案:

答案 0 :(得分:4)

您必须将其绑定到源和路径,例如以下简单对象:

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

可以通过将对象添加到其资源集合的窗口来创建对象。 源绑定到对象及其属性[Name]的路径,在此示例中为“0123456789”。

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

最后,您必须通过Source = {StaticResource class1}将其源代码绑定到此资源

<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>

接下来,您可以使用经过验证的文本框进行播放。