Właściwości zależności
Uwaga
Ta zawartość jest drukowana przez uprawnienie Pearson Education, Inc. z Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition. Wydanie to zostało opublikowane w 2008 roku, a książka została w pełni zmieniona w trzecim wydaniu. Niektóre informacje na tej stronie mogą być nieaktualne.
Właściwość zależności (DP) to zwykła właściwość, która przechowuje swoją wartość w magazynie właściwości, zamiast przechowywać ją w zmiennej typu (polu), na przykład.
Dołączona właściwość zależności jest rodzajem właściwości zależności modelowanej jako statyczne metody Get i Set reprezentujące "właściwości" opisujące relacje między obiektami i ich kontenerami (np. położenie Button
obiektu w kontenerze Panel
).
✔️ Należy podać właściwości zależności, jeśli potrzebujesz właściwości do obsługi funkcji WPF, takich jak styl, wyzwalacze, powiązanie danych, animacje, zasoby dynamiczne i dziedziczenie.
Projekt właściwości zależności
✔️ Funkcja DO dziedziczy z DependencyObjectklasy lub jednego z jego podtypów podczas implementowania właściwości zależności. Typ zapewnia bardzo wydajną implementację magazynu właściwości i automatycznie obsługuje powiązanie danych WPF.
✔️ Funkcja DO udostępnia zwykłą właściwość CLR i publiczne statyczne pole tylko do odczytu, przechowując wystąpienie System.Windows.DependencyProperty dla każdej właściwości zależności.
✔️ Zaimplementuj właściwości zależności, wywołując metody DependencyObject.GetValue wystąpień i DependencyObject.SetValue.
✔️ Nazwij pole statyczne właściwości zależności, sufiksując nazwę właściwości o nazwie "Property".
❌ NIE USTAWIAJ wartości domyślnych właściwości zależności jawnie w kodzie; Zamiast tego ustawić je w metadanych.
Jeśli ustawisz właściwość domyślną jawnie, możesz uniemożliwić ustawienie tej właściwości za pomocą niektórych niejawnych środków, takich jak styl.
❌ NIE umieszczaj kodu we właściwościach innych niż standardowy kod, aby uzyskać dostęp do pola statycznego.
Ten kod nie będzie wykonywany, jeśli właściwość jest ustawiana w sposób niejawny, taki jak styl, ponieważ styl używa pola statycznego bezpośrednio.
❌ NIE UŻYWAJ właściwości zależności do przechowywania bezpiecznych danych. Nawet prywatne właściwości zależności można uzyskać publicznie.
Projekt dołączonej właściwości zależności
Właściwości zależności opisane w poprzedniej sekcji reprezentują właściwości wewnętrzne typu deklarowanego; na przykład Text
właściwość jest właściwością TextButton
, która ją deklaruje. Specjalny rodzaj właściwości zależności jest dołączoną właściwością zależności.
Klasycznym przykładem dołączonej właściwości jest Grid.Column właściwość . Właściwość reprezentuje położenie kolumny Przycisk (nie siatka), ale ma znaczenie tylko wtedy, gdy przycisk znajduje się w siatce, a więc jest "dołączony" do przycisków według siatki.
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Button Grid.Column="0">Click</Button>
<Button Grid.Column="1">Clack</Button>
</Grid>
Definicja dołączonej właściwości wygląda głównie tak jak w przypadku właściwości regularnej zależności, z tą różnicą, że metody dostępu są reprezentowane przez statyczne metody Get i 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)
);
}
Walidacja właściwości zależności
Właściwości często implementują to, co nazywa się walidacją. Logika walidacji jest wykonywana po podjęciu próby zmiany wartości właściwości.
Niestety metody dostępu właściwości zależności nie mogą zawierać dowolnego kodu sprawdzania poprawności. Zamiast tego logika walidacji właściwości zależności musi być określona podczas rejestracji właściwości.
❌ NIE umieszczaj logiki sprawdzania poprawności właściwości zależności w metodach dostępu właściwości. Zamiast tego przekaż wywołanie zwrotne weryfikacji do DependencyProperty.Register
metody .
Powiadomienia o zmianie właściwości zależności
❌ NIE implementuj logiki powiadamiania o zmianie w metodach dostępu właściwości zależności. Właściwości zależności mają wbudowaną funkcję powiadomień o zmianie, która musi być używana przez podanie wywołania zwrotnego powiadomienia o zmianie do elementu PropertyMetadata.
Coercion wartości właściwości zależności
Wymuszanie właściwości odbywa się, gdy wartość nadana ustawiczowi właściwości jest modyfikowana przez program ustawiający przed faktycznie zmodyfikowaniem magazynu właściwości.
❌ NIE implementuj logiki przymusu w metodach dostępu właściwości zależności.
Właściwości zależności mają wbudowaną funkcję przymusu i mogą być używane przez dostarczenie wywołania zwrotnego przymusu do elementu PropertyMetadata
.
© Części 2005, 2009 Microsoft Corporation. Wszelkie prawa zastrzeżone.
Reprinted by permission of Pearson Education, Inc. from Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition by Krzysztof Cwalina and Brad Abrams, published oct 22, 2008 by Addison-Wesley Professional w ramach Microsoft Windows Development Series.