детерминированная и асинхронная проверка полей в WPF - PullRequest
6 голосов
/ 02 сентября 2011

В моем приложении на основе MVVM мне нужно проверить поля в записи данных из. Если возможно, я хотел бы использовать стандартную привязку проверки WPF с ErrorTemplates.

Однако я бы хотел, чтобы выполнение логики валидации было полностью инициировано / инициировано ViewModel (push для View, а не pull для View) по следующим причинам:

  1. Он должен работать асинхронно, потому что логика проверки может занять некоторое время.
  2. Мне нужно быть более детерминированным и тонко детализированным, когда должна выполняться логика проверки (например, только после того, как пользователь нажимает «Применить» или когда внутреннее состояние изменяется таким образом, что записи внезапно становятся недействительными)

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

Ответы [ 2 ]

0 голосов
/ 07 сентября 2011

Я отправил ответ на другой ваш вопрос, который, очевидно, тоже ответил на него.

Создание визуального дерева на основе шаблона элемента управления в коде

0 голосов
/ 02 сентября 2011

Встроенная проверка для WPF и Silverlight предназначена для быстрой проверки на стороне клиента (например, Regex, анализ значений и т. Д.).

Если вам нужно перейти на сервер для выполнения проверки (или проверка занимает много времени), я бы сделал это по-своему. Например, при нажатии кнопки сохранения и т. Д.

Допустим, у вас есть метод Save во ViewModel (вы не упоминаете, какую платформу MVVM вы используете):

public void Save()
{
     //Do your validation, this might start a new thread (I use Async CTP myself)

     //If validation is good, do your extra work, else display validation errors
}

Я бы просто выполнил всю работу, необходимую для этого, в рамках действия в вашей ViewModel

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