【问题标题】:validation properties by attribute按属性验证属性
【发布时间】:2011-01-31 23:53:24
【问题描述】:

我创建具有两个属性的类 - 名称、链接(如下)。我通过Required 和StringLength 属性使用简单的属性验证。我将此类对象绑定到 WPF ListBox(带有文本框)。

但是当我的文本框为空或写的单词超过 8 个符号时,什么也没有发生:/

我应该怎么做才能触发 ErrorMessage?或者如何以其他方式实现验证?

我也尝试使用:

            if (value is int)
            {
                throw new ArgumentException("Wpisałeś stringa!!");
            }

但它只在调试模式下触发:/

我的类实现了属性验证:

 public class RssInfo : INotifyPropertyChanged
{
    public RssInfo() { }
    public RssInfo(string _nazwa, string _link)
    {
        nazwa = _nazwa;
        link = _link;
    }

    private string nazwa;
    [Required(ErrorMessage = "To pole jest obowiązkowe nAZWA")]
    public string Nazwa
    {
        get { return nazwa; }
        set
        {
            if (value != nazwa)
            {
                nazwa = value;
                onPropertyChanged("Nazwa");
            }
            if (value is int)
            {
                throw new ArgumentException("Wpisałeś stringa!!");
            }
        }
    }
    private string link;
    [Required(ErrorMessage="To pole jest obowiązkowe link")]
    [StringLength(8, ErrorMessage = "Link cannot be longer than 8 characters")]
    public string Link
    {
        get { return link; }
        set
        {
            if (value != link)
            {
                link = value;
                onPropertyChanged("Link");
            }
        }
    }

    #region INotifyPropertyChanged Members

    public event PropertyChangedEventHandler PropertyChanged;

    #endregion

    private void onPropertyChanged(string propertyName)
    {

        if (this.PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}

【问题讨论】:

    标签: c# wpf validation attributes


    【解决方案1】:

    您的 TextBox TextProperty 是否绑定到您的 Name RSSInfo 属性? 绑定模式是TwoWays 吗?此外,请记住 TextBox 中的 Text 绑定仅在 TextBox 失去键盘焦点时更新。如果要更新每个键盘输入的属性,请在绑定中使用UpdateSourceTrigger="PropertyChanged" 属性。

    也向我们展示你的 XAML,答案很简单 ;-)

    另外,我建议您通过在您的 TextBox 上使用自定义 ValidationRule 来增强您的验证。这将使您的 UI 仅显示您的模型 (RSSInfo) 名称和链接属性的有效数据,因为当用户输入无效时,TextBox ValidationRule 会禁用 Text 绑定。这是必须使用的;-)

    更多关于ValidationRule的信息在这里: http://weblogs.asp.net/monikadyrda/archive/2009/06/24/wpf-textbox-validation.aspx

    【讨论】:

    • 你帮了我很多!来自链接的帖子也很有用:) Monika - 它是谁的博客,也是来自我的国家,但我从未听说过她的博客,谢谢! :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-11
    • 2023-03-25
    • 2021-04-30
    • 1970-01-01
    • 1970-01-01
    • 2020-03-09
    • 1970-01-01
    相关资源
    最近更新 更多