2011-03-24 3 views
1

У меня есть экран с бизнес-правилами, который отображает некоторые поля на основе бизнес-данных и не отображает другие. Затем я играю с Видимость, чтобы показать/скрыть их.Как заставить WPF повторно проверить элементы управления?

Мой бизнес-объект реализует IDataErrorInfo.

Проблема заключается в том, что некоторые проверки проверяются только при отображении поля.

В этом коде экстракте, первый IF делает проверку, только если type_account внутреннего

string ValidateMinimumAmount() 
{ 

    if (this.type_account != "INTERNAL") 
     return null; 

    if (this.account_minimum==null) 
    { 
     return "You must provide a minimum amount"; 
    } 
    return null; 
} 

проблема у меня есть, что, поскольку начальное состояние моего БО НЕ «Internal», то даже если после того, как пользователь выбирает «ВНУТРЕННИЙ», проверка не повторяется снова.

Как я могу «заставить» проверку произойти ПОСЛЕ первого раза. Конечно, я проверил, что если начальное состояние «Внутреннее», то оно работает

+0

Не могли бы вы разместить свой XAML? – sthotakura

ответ

1

Я бы посоветовал вам более «уведомлять» об ошибках, добавив свойство ошибки.

Вот очень понятно статья, которая помогла мне, когда я только начал работать в WPF как новичок полным, вы должны смотреть на это:

http://www.codeproject.com/KB/WPF/wpfvalidation.aspx

+0

вы в основном говорите мне, чтобы избавиться от IDataErrorInfo? – user96547

+0

Нет, вы должны использовать его, как я уже сказал, в этой статье объясняется, что вы легко реализуете его с постоянно меняющимся строковым свойством. – Damascus

+0

Я не видел постоянно обновляемую строку в статье. можете ли вы направить меня туда? – user96547

1

вы говорите, что ваша «проверка» исчезают, когда вы играете со шкурой и шоу? но ваш объект с реализацией IDataErrorInfo по-прежнему недействителен после повторного показа?

тогда, кажется, это просто проблема ValidationErrorTemplate Adorner. я не знаю, как ваш XAML выглядеть, но окружить контейнер с элементами управления для проверки с AdornerDecorator

<AdornerDecorator> 
    <Yourcontainer with your Controls inside/> 
</AdornerDecorator> 

если этот трюк Dont решить вашу проблему отправлять связывание ваш XAML и IDataErrorInfo реализации.

0

Ваш вопрос немного запутанный. Надеюсь, этот ответ поможет.

В вашем примере вы хотите, чтобы минимальная сумма требовалась, если тип учетной записи является внутренним. Это означает, что состояние проверки свойства MinimumAmount зависит от значения AccountType. Таким образом, вам необходимо подтвердить действие MinimumAmount при изменении AccountType. Таким образом:

public string AccountType 
{ 
    get { return _AccountType; } 
    set 
    { 
     if (_AccountType != value) 
     { 
     _AccountType = value; 
     OnPropertyChanged("AccountType"); 
     ValidateMinimumAmount(); 
     } 
    } 
} 

Если у вас есть много взаимозависимостей между свойствами, иногда проще просто реализовать метод Validate() для всего объекта и назовите его всякий раз, когда какие-либо изменения свойств. Не увлекайтесь идеей, что неэффективно повторно проверять весь объект в любое время, когда изменяется свойство. Просмотр свойств модели обычно изменяется только в ответ на ввод пользователя, и если ваш метод Validate() занимает значительное количество времени для запуска, вероятность очень мала, что это будет проблемой.

Смежные вопросы