проверка свойств по атрибуту - PullRequest
1 голос
/ 26 марта 2010

Я создаю класс с двумя свойствами - имя, ссылка (ниже). Я использую простую проверку свойств по атрибуту Required и StringLength. Я связываю этот объект класса с WPF ListBox (с textBoxs).

Но когда у меня пустое текстовое поле или я пишу слова длиннее 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));
        }
    }
}

1 Ответ

2 голосов
/ 26 марта 2010

Ваш TextBox TextProperty привязан к вашему имени RSSInfo Property? И является ли режим привязки TwoWays? Также помните, что привязка Text в TextBox обновляется только тогда, когда TextBox теряет фокус клавиатуры. Если вы хотите обновить свойство для каждого ввода с клавиатуры, используйте атрибут UpdateSourceTrigger="PropertyChanged" в привязке.

Покажите нам свой XAML, ответ может быть очень простым; -)

Кроме того, я бы посоветовал вам улучшить вашу проверку с помощью пользовательского ValidationRule на вашем TextBox. Это позволит вашему пользовательскому интерфейсу представлять только действительные данные вашей модели (RSSInfo), а также свойства имени и ссылки модели, потому что TextBox ValidationRule отключает привязку Text, когда пользовательский ввод недопустим. Это необходимо использовать; -)

Больше информации о ValidationRule здесь: http://weblogs.asp.net/monikadyrda/archive/2009/06/24/wpf-textbox-validation.aspx

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