2010-01-18 6 views
1

Я уже некоторое время работаю с WPF и шаблоном MVVM. Я испытываю трудности с получением проверки, работая «обычным» способом:Проверка формы в WPF

1) Я реализую интерфейс IDataErrorInfo в своей модели ViewModel. XAML выглядит примерно так:

<TextBox Grid.Column="1" 
     Grid.Row="1" 
     Text="{Binding Path=ProjectKey, ValidatesOnDataErrors=True, UpdateSourceTrigger=LostFocus}" /> 

Проблема здесь состоит в том, что используется ли LostFocus и PropertyChanged триггера, текстовое поле проверяется перед пользователем, когда-либо вкладок этого элемента управления. Это означает, что если я проверяю пустые поля, пользователь увидит много красных, когда они сначала откроют форму. В идеале вход будет подтвержден только после первого «потерянного фокуса» или «изменения свойств» или после нажатия кнопки «Отправить».

2) Другая проблема - это проверка в конце, когда пользователь нажимает «Отправить». Перед отправкой в ​​базу данных есть определенные вещи, которые вы хотите проверить, например, дубликаты. Я понимаю, что могу использовать UpdateSourceTrigger = Explicit и вызывать метод UpdateSource для всех элементов управления. Мне интересно, есть ли способ сделать это в шаблоне MVVM. Кажется, что такой код не должен быть в ViewModel, так как он очень определен ...

Любые идеи были бы замечательными. Я искал много в Интернете, но не могу найти правильное решение ...

+0

http://stackoverflow.com/questions/2821998/how-can-i-get-wpf-to-not-display-validation-errors-upon-initial-display-of-contro/2829884#2829884 может решить обе проблемы – nash

ответ

0

номер один ваши свойства на ViewModel должны быть инициализированы значением, прежде чем руки в конструкторе

public double Property1 {get; set;} 

    public ViewModel() 
{ 
    Property1 = 0; 
} 

Для второго номера кнопка отправки не должна включаться, пока все поля не пройдут проверку. Если у вас есть поле, которое уникально в базе данных, тогда проверьте его на изменение свойства и отображение и ошибку, если он не пройдет. У вас может быть логическое свойство, привязанное к свойству IsEnabled кнопки и заданное значение true после того, как все поля пройдут проверку.

+0

Я следовал этому примеру от Джоша Смита: http://joshsmithonwpf.wordpress.com/2008/11/14/using-a-viewmodel-to-provide-meaningful-validation-error-messages/ –