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

Windows presentation foundation with - MacDonald M.

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

• Устанавливает прикрепленное свойство Validation.HasError в true на привязанном элементе (в данном случае — элементе управления TextBox).
• Создает объект ValidationError с подробностями об ошибке (возвращенными из метода ValidationRule.Validate()) и добавляет его в прикрепленную коллекцию Validation.Errors.
• Если свойство Binding.NotifyOnValidationError установлено в true, WPF инициирует в элементе событие Validation.Error.
Визуальное представление вашего элемента управления также изменяется при возникновении ошибки. WPF автоматически переключает шаблон, используемый элементом управления, когда его свойство Validation.HasError принимает значение true, на шаблон, определенный в свойстве Validation.ErrorTemplate. В текстовом поле новый шаблон окрашивает контур рамки в красный цвет.
В большинстве случаев вы захотите как-то усилить индикацию ошибки и выдать определенную информацию об ошибке, послужившей причиной проблемы. Вы можете использовать код, обрабатывающий событие Error, или же применить собственный шаблон элемента управления, который обеспечивает другую визуальную индикацию. Но прежде чем вы попробуете любой из этих вариантов, стоит рассмотреть другой способ, которым WPF позволяет перехватывать ошибки — использование IDataErrorlnfo в ваших объектах данных и написание собственных специальных правил проверки достоверности.
DataErrorValidationRule
Многие приверженцы объектно-ориентированного программирования предпочитают не генерировать исключения для индикации ошибок ввода. На то есть несколько причин, среди которых следующие: ошибка пользовательского ввода не является исключительной ситуацией, ошибочные условия могут зависеть от взаимодействия значений множества свойств, к тому же иногда стоит сохранить некорректные значения для дальнейшей обработки вместо того, чтобы немедленно отклонять их.
В мире Windows Forms разработчики могут использовать интерфейс IDataErrorlnfo (из пространства имен System.ComponentModel), чтобы избегать исключений с сохранением кода проверки достоверности в классе данных. Интерфейс IDataErrorInfo был изначально спроектирован для поддержки сеточных отображаемых элементов управления, таких как DataGridView, но также он работает и с решениями общего назначения для сообщений об ошибках. Хотя IDataErrorInfo не поддерживался в первом выпуске WPF, он поддерживается в WPF 3.5.
Интерфейс IDataErrorInfo требует наличия двух членов: строкового свойства Error и строкового индексатора. Свойство Error предоставляет общую строку описания всего объекта (которая может выглядеть как “Invalid Data” (“Неверные данные”)). Строковый индексатор принимает имя свойства и возвращает соответствующую детальную информацию об ошибке. Например, если вы передадите "UnitCost" строковому индексатору, то можете получить ответ вроде “The UnitCost cannot be negative” (“Значение UnitCost не можут быть отрицательным”). Ключевая идея состоит в том, что свойства устанавливаются нормально, без возражений, а индексатор позволяет пользовательскому интерфейсу проверить неверные данные. Все логика обработки ошибок для целого класса централизована в одном месте.
Ниже приведена пересмотренная версия класса Product, реализующего IDataErrorInfo. Хотя вы можете использовать IDataErrorInfo для вывода сообщений
Book_Pro_WPF-2.mdb 515 19.05.2008 18:10:47
516 Глава 16
проверки достоверности для широкого диапазона связанных с этой проверкой проблем, данная логика проверяет на наличие ошибок только одно свойство — ModeNumber.
public class Product : INotifyPropertyChanged, IDataErrorInfo {
private string modelNumber; public string ModelNumber {
get { return modelNumber; } set {
modelNumber = value;
OnPropertyChanged(new PropertyChangedEventArgs("ModelNumber"));
}
}
// Обработка ошибок происходит здесь. public string this[string propertyName]
{
get
{
if (propertyName == "ModelNumber")
{
bool valid = true;
foreach (char c in ModelNumber)
{
if (!Char.IsLetterOrDigit(c))
{
valid = false; break;
}
}
if (!valid)
return "The ModelNumber can only contain letters and numbers.";
}
return null;
}
}
// WPF не использует это свойство. public string Error {
get { return null; }
}
}
Чтобы заставить WPF использовать интерфейс IDataErrorInfo и применять его для проверки ошибок при модификации свойства, вы должны добавить DataErrorValidationRule к коллекции правил Binding.ValidationRules, как показано ниже:
<TextBox Margin="5" Grid.Column="1">
<TextBox.Text>
<Binding Path="ModelNumber">
<Binding.ValidationRules>
<DataErrorValidationRuleX/DataErrorValidationRule>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
Book Pro WPF-2.indb 516
i:10:47
Привязка данных 517
Кстати, вы можете комбинировать оба подхода, создавая объект данных, который генерирует исключения для некоторых типов ошибок и использует IDataErrorInfo для сообщения о других. Вы должны лишь позаботиться о применении как
ExceptionValidationRule, так и DataErrorValidationRule.
Совет. .NET 3.5 предлагает сокращение. Вместо добавления к привязке ExceptionValidationRule вы можете установить свойство Binding.ValidatesOnExceptions в true. Вместо добавления DataErrorValidationRule можно установить в true свойство Binding.
Предыдущая << 1 .. 256 257 258 259 260 261 < 262 > 263 264 265 266 267 268 .. 473 >> Следующая