Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Poznámka:
Tento obsah je znovu vytištěn oprávněním Pearson Education, Inc. z Framework Design Guidelines: Conventions, Idioms a Patterns for Reusable .NET Libraries, 2. vydání. Tato edice byla publikována v roce 2008 a kniha byla od té doby plně upravena ve třetím vydání. Některé informace na této stránce můžou být zastaralé.
Vlastnost závislosti (DP) je běžná vlastnost, která ukládá její hodnotu do úložiště vlastností místo uložení do proměnné typu (pole), například.
Připojená vlastnost závislosti je druh vlastnosti závislosti modelovaný jako statické metody Get a Set představující "vlastnosti" popisující vztahy mezi objekty a jejich kontejnery (např. umístění Button objektu v kontejneru Panel ).
✔️ Poskytněte vlastnosti závislosti, pokud potřebujete vlastnosti pro podporu funkcí WPF, jako jsou styly, triggery, datové vazby, animace, dynamické prostředky a dědičnost.
Návrh vlastnosti závislosti
✔️ PŘI implementaci vlastností závislosti dědí z DependencyObjectnebo některého z jeho podtypů. Tento typ poskytuje velmi efektivní implementaci úložiště vlastností a automaticky podporuje datové vazby WPF.
✔️ DO poskytuje běžnou vlastnost CLR a veřejné statické pole jen pro čtení, které ukládá instanci System.Windows.DependencyProperty pro každou vlastnost závislosti.
✔️ DO implementujte vlastnosti závislosti voláním metod instance DependencyObject.GetValue a metod DependencyObject.SetValue.
✔️ Do pojmenujte statické pole vlastnosti závislosti příponou názvu vlastnosti "Vlastnost".
❌ NENASTAVUJTE výchozí hodnoty vlastností závislostí explicitně v kódu; místo toho je nastavte v metadatech.
Pokud nastavíte výchozí vlastnost explicitně, můžete této vlastnosti zabránit v nastavení určitými implicitními prostředky, jako je například styl.
❌ NEVKLÁDEJTE kód do jiných přístupových objektů vlastností, než je standardní kód pro přístup ke statickému poli.
Tento kód se neprovede, pokud je vlastnost nastavena implicitně, například styling, protože styling používá statické pole přímo.
❌ NEPOUŽÍVEJTE vlastnosti závislostí k ukládání zabezpečených dat. K vlastnostem privátní závislosti lze přistupovat veřejně.
Návrh připojených vlastností typu závislosti
Vlastnosti závislostí popsané v předchozí části představují vnitřní vlastnosti deklarujícího typu; Například Text vlastnost je vlastnost TextButton, která ji deklaruje. Speciální druh vlastnosti závislosti je připojená vlastnost závislosti.
Klasický příklad připojené vlastnosti je Grid.Column vlastnost. Vlastnost představuje umístění sloupce tlačítka (nikoli Gridu), ale je relevantní pouze v případě, že je tlačítko obsaženo v Gridu, a proto je "přiřazeno" k tlačítku mřížkou.
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Button Grid.Column="0">Click</Button>
<Button Grid.Column="1">Clack</Button>
</Grid>
Definice připojené vlastnosti vypadá většinou jako u běžné vlastnosti závislosti s tím rozdílem, že přístupové objekty jsou reprezentovány statickými metodami Get a 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)
);
}
Ověřování vlastností závislosti
Vlastnosti často implementují to, co se nazývá ověřování. Logika ověřování se spustí při pokusu o změnu hodnoty vlastnosti.
Přístupové objekty vlastností závislostí bohužel nesmí obsahovat libovolný ověřovací kód. Místo toho je potřeba zadat logiku ověřování vlastností závislostí během registrace vlastnosti.
❌ NEVKLÁDEJTE logiku ověřování vlastnosti závislosti do přístupových metod vlastnosti. Místo toho předejte metodě DependencyProperty.Register zpětné volání ověření.
Oznámení o změnách vlastností závislostí
❌ NEimplementujte logiku oznámení o změnách ve vlastnostech závislostí akcesorů. Vlastnosti závislostí mají integrovanou funkci oznámení o změnách, která musí být použita zadáním zpětného volání oznámení změn do PropertyMetadata.
Vynucení hodnoty vlastnosti závislosti
Přetypování vlastnosti probíhá, když hodnota zadaná setteru vlastnosti je změněna setterem předtím, než je samotný úložiště vlastnosti skutečně upraveno.
❌ Nepoužívejte logiku nátlaku v přístupových metodách vlastností závislostí.
Vlastnosti závislostí obsahují vestavěnou funkci tlačení a její použití je možné tím, že dodáte zpětné volání tlačení do PropertyMetadata.
Části z © 2005, 2009 Microsoft Corporation. Všechna práva vyhrazena.
Přetištěno se svolením Pearson Education, Inc. z Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition od Krzysztofa Cwaliny a Brada Abramse, vydáno 22. října 2008 nakladatelstvím Addison-Wesley Professional jako součást série Microsoft Windows Development.