Книги
чёрным по белому
Главное меню
Главная О нас Добавить материал Поиск по сайту Карта книг Карта сайта
Книги
Археология Архитектура Бизнес Биология Ветеринария Военная промышленность География Геология Гороскоп Дизайн Журналы Инженерия Информационные ресурсы Искусство История Компьютерная литература Криптология Кулинария Культура Лингвистика Математика Медицина Менеджмент Металлургия Минералогия Музыка Научная литература Нумизматика Образование Охота Педагогика Политика Промышленные производства Психология Путеводители Религия Рыбалка Садоводство Саморазвитие Семиотика Социология Спорт Столярное дело Строительство Техника Туризм Фантастика Физика Футурология Химия Художественная литература Экология Экономика Электроника Энергетика Этика Юриспруденция
Новые книги
Реклама

Windows presentation foundation with - MacDonald M.

MacDonald M. Windows presentation foundation with — Вильямс , 2008. — 928 c.
ISBN 978-5-8459-1429-3
Скачать (прямая ссылка): wpfwindowspresente2008.pdf
Предыдущая << 1 .. 257 258 259 260 261 262 < 263 > 264 265 266 267 268 269 .. 473 >> Следующая

ValidatesOnDataErrors.
Специальные правила проверки достоверности
Подход с применением специального правила проверки достоверности подобен применению специального конвертера. Вы определяете класс-наследник ValidationRule (из пространства имен System.Windows.Controls) и переопределяете его метод Validate() для выполнения требуемой проверки достоверности. Если нужно, вы можете добавить свойства, принимающие другие детали, которые могут повлиять на вашу проверку достоверности (например, правило, определяющее, что текст может включать свойство CaseSensitive типа Boolean).
Ниже приведено полное правило проверки достоверности, ограничивающее десятичные значения некоторым диапазоном. По умолчанию минимум устанавливается в 0, а максимум — в наибольшее число, которое умещается в десятичный тип данных, поскольку это правило предназначено для работы с денежными значениями. Однако для максимальной гибкости обе эти детали являются конфигурируемыми через свойства.
public class PositivePriceRule : ValidationRule
{
private decimal min = 0; private decimal max = Decimal.MaxValue; public decimal Min {
get { return min; } set { min = value; }
}
public decimal Max {
get { return max; } set { max = value; }
}
public override ValidationResult Validate(object value, CultureInfo cultureInfo)
{
decimal price = 0; try {
if (((string)value).Length > 0) price = Decimal.Parse((string)value, NumberStyles.Any, culture);
}
catch ()
{
return new ValidationResult(false, "Недопустимые символы.");
}
if ((price < Min) || (price > Max))
{
return new ValidationResult(false,
"Вне диапазона от " + Min + " до " + Max + ".");
}
Book_Pro_WPF-2.mdb 517 19.05.2008 18:10:47
518 Глава 16
else
{
return new ValidationResult(true, null);
}
}
}
Обратите внимание, что логика проверки достоверности использует перегруженную версию метода Decimal.Parse() , принимающего значение из перечисления NumberStyles. Это связано с тем, что проверка достоверности всегда выполняется перед преобразованием. Если вы применяете и средство проверки достоверности, и конвертер к одному полю, то нужно обеспечить успех проверки достоверности при наличии символа валюты. Успех или неудача логики проверки достоверности определяется возвращенным объектом ValidationResult. Свойство IsValid указывает на успех проверки достоверности, и если проверка достоверности не прошла, то свойство ErrorContent предоставляет объект, описывающий проблему. В данном примере содержимое ошибки — строка, которая будет отображена в пользовательском интерфейсе, что является наиболее распространенным подходом.
Как только вы будете удовлетворены своим правилом проверки достоверности, вы сможете применить его к элементу, добавив его в коллекцию Binding.ValidationRules. Вот пример, использующий PositivePriceRule и устанавливающий Maximum равным 999 99:
<TextBlock Margin="7" Grid.Row="2">Unit Cost:</TextBlock>
<TextBox Margin="5" Grid.Row="2" Grid.Column="1">
<TextBox.Text>
<Binding Path="UnitCost">
<Binding.ValidationRules>
<local:PositivePriceRule Max="999.99" />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
Часто вы будете определять отдельный объект правила проверки достоверности для каждого элемента, использующего один и тот же тип правила. Это объясняется тем, что вы можете решить подкорректировать свойства проверки достоверности (такие как минимум и максимум в PositivePriceRule) для разных элементов индивидуально. Если вы знаете, что вам нужно использовать абсолютно одинаковые правила проверки достоверности для более одной привязки, вы можете определить правило в виде ресурса и просто указывать на него в каждой привязке, используя расширение разметки StaticResource.
Как вы, вероятно, сообразили, коллекция Binding.ValidationRules может принимать неограниченное количество правил. Когда значение фиксируется в источнике, WFP проверяет каждое правило проверки достоверности по порядку. (Напомним, что значение в текстовом поле фиксируется в источнике, когда текстовое поле теряет фокус, если только вы не укажете иначе в свойстве UpdateSourceTrigger.) Если все проверки достоверности прошли успешно, то WPF затем вызывает конвертер (если он есть) и применяет значение к источнику.
На заметку! Если вы добавите Роз1б1уеРг1сеКи1е, за которым последует Ехсер-ЫопУаНСа-ЫопКи1е, то Роз1б1уеРг1сеКи1е будет оценено первым. Оно перехватит ошибки выхода за пределы допустимого диапазона. Однако Ехсерб1опУа11Саб1опКи1е перехватывает ошибки приведения типа, которые могут быть вызваны неправильным вводом, который невозможно привести к десятичному значению (например, последовательность букв).
Book_Pro_WPF-2.mdb 518 19.05.2008 18:10:47
Привязка данных 519
Когда вы выполняете проверку достоверности с помощью PositivePriceRule, поведение будет таким же, как и при использовании ExceptionValidationRule — текстовое поле будет очерчено красным, установлены свойства HasError и Error, и инициировано событие Error. Чтобы снабдить пользователя каким-то полезным откликом, потребуется добавить немного кода, чтобы настроить ErrorTemplate. В следующих разделах мы расскажем об этом.
Предыдущая << 1 .. 257 258 259 260 261 262 < 263 > 264 265 266 267 268 269 .. 473 >> Следующая