【问题标题】:WPF Validation of Textbox, what should the binding look like?文本框的WPF验证,绑定应该是什么样子?
【发布时间】:2011-08-30 13:21:35
【问题描述】:

我正在尝试验证 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 但它不起作用。这是如何工作的?

【问题讨论】:

  • 我还尝试在 xaml.cs 文件中创建一个属性并将文本框绑定到它。这也没有帮助。

标签: .net wpf validation xaml textbox


【解决方案1】:

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

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>

接下来,您可以使用经过验证的文本框播放一些内容。

【讨论】:

  • 所以我必须创建一个新的 c# 类只是为了拥有文本框可以绑定的属性? - 所以我可以为我想要验证的所有属性创建一个类?
  • 你让我很开心,我已经为此困扰了很长时间。现在我只是想知道。为什么我不能不创建路径 Textbox.text?那不也是一种属性吗?
  • 通常,您希望将 textbox.text 绑定到可以验证的内容,而不是绑定到自身。这没有任何意义。输入必须位于应用程序逻辑中的某个位置。当然,您可以将其设置为任何(数据)源。
猜你喜欢
  • 2010-12-02
  • 1970-01-01
  • 2013-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-12
  • 2015-12-09
相关资源
最近更新 更多