Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Замечание
Это содержимое перепечатывается разрешением Pearson Education, Inc. из руководства по проектированию платформы: соглашения, идиомы и шаблоны для повторно используемых библиотек .NET, 2-го выпуска. Этот выпуск был опубликован в 2008 году, и книга с тех пор была полностью пересмотрена в третьем выпуске. Некоторые сведения на этой странице могут быть устаревшими.
Свойство зависимостей (DP) — это обычное свойство, которое хранит его значение в хранилище свойств вместо хранения в переменной типа (поле), например.
Присоединенное свойство зависимости — это тип свойства зависимостей, моделироваемого как статические методы Get и Set, представляющие "свойства", описывающие связи между объектами и их контейнерами (например, положение Button объекта в контейнере Panel ).
✔️ Укажите свойства зависимостей, если вам нужны свойства для поддержки таких функций WPF, как стилизация, триггеры, привязка данных, анимация, динамические ресурсы и наследование.
Проектирование свойств зависимостей
✔️ DO наследует от DependencyObjectподтипов или одного из его подтипов при реализации свойств зависимостей. Тип обеспечивает очень эффективную реализацию хранилища свойств и автоматически поддерживает привязку данных WPF.
✔️ Do предоставляет обычное свойство CLR и общедоступное статическое поле только для чтения, сохраняющее экземпляр System.Windows.DependencyProperty каждого свойства зависимостей.
✔️ Обязательно реализуйте свойства зависимостей, вызывая методы экземпляра DependencyObject.GetValue и DependencyObject.SetValue.
✔️ Назовите поле статического свойства зависимостей, добавив к имени свойства суффикс "Property".
❌ НЕ задавайте значения по умолчанию свойств зависимости явно в коде; используйте метаданные вместо этого.
Если вы явно задаете значение свойства по умолчанию, это может помешать заданию этого свойства неявными средствами, такими как стили.
❌ НЕ помещайте код в методы доступа к свойствам, отличные от стандартного кода для доступа к статическому полю.
Этот код не будет выполняться, если свойство задано неявными средствами, например стилизация, так как стилизация использует статическое поле напрямую.
❌ НЕ используйте свойства зависимостей для хранения защищенных данных. Даже к свойствам частной зависимости можно получить общедоступный доступ.
Проектирование присоединенных свойств зависимости
Свойства зависимостей, описанные в предыдущем разделе, представляют встроенные свойства объявляющего типа; Например, Text свойство является свойством TextButton, которое объявляет его. Особый вид свойства зависимости — это подключаемое свойство зависимости.
Классическим примером присоединенного свойства является Grid.Column свойство. Свойство представляет положение столбца для кнопки (а не сетки), но оно имеет значение только в том случае, если кнопка находится внутри сетки, и поэтому это свойство связано с кнопкой посредством сетки.
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Button Grid.Column="0">Click</Button>
<Button Grid.Column="1">Clack</Button>
</Grid>
Определение присоединенного свойства в основном выглядит как обычное свойство зависимостей, за исключением того, что методы доступа представлены статическими методами Get и Set:
public class Grid {
public static int GetColumn(DependencyObject obj) {
return (int)obj.GetValue(ColumnProperty);
}
public static void SetColumn(DependencyObject obj, int value) {
obj.SetValue(ColumnProperty,value);
}
public static readonly DependencyProperty ColumnProperty =
DependencyProperty.RegisterAttached(
"Column",
typeof(int),
typeof(Grid)
);
}
Проверка свойств зависимостей
Свойства часто реализуют то, что называется проверкой. Логика проверки выполняется при попытке изменить значение свойства.
К сожалению, методы доступа к свойствам зависимостей не могут содержать произвольный код проверки. Вместо этого во время регистрации свойств необходимо указать логику проверки свойств зависимостей.
❌ Не помещайте логику проверки свойств зависимостей в методы доступа свойства. Вместо этого передайте обратный вызов проверки методу DependencyProperty.Register .
Уведомления об изменении свойств зависимостей
❌ НЕ реализуйте логику уведомления об изменениях в методах доступа к свойствам зависимостей. Свойства зависимостей имеют встроенную функцию уведомлений об изменениях, которая должна использоваться, обеспечивая вызов обратного уведомления об изменениях через PropertyMetadata.
Принуждение значения свойства зависимостей
Приведение значений свойств происходит, когда значение, заданное сеттеру, изменяется сеттером перед фактическим изменением хранилища свойств.
❌ НЕ реализуйте логику приведения в методах доступа к свойствам зависимостей.
Свойства зависимостей имеют встроенную функцию приведения, и ее можно использовать, указав обратный PropertyMetadataвызов приведения.
© Часть 2005, 2009 Корпорация Майкрософт. Все права защищены.
Перепечатан с разрешения Pearson Education, Inc. из Руководство по проектированию: Соглашения, идиомы и шаблоны для повторного использования библиотек .NET, 2-е издание Кшиштоф Чвалина и Брэд Абрамс, опубликованное 22 октября 2008 года Addison-Wesley Профессиональный в рамках серии разработки Microsoft Windows.