Sdílet prostřednictvím


Vlastnosti závislosti

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 DependencyObject.GetValue instance a 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í závislostí

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 Button (nikoli Mřížka), ale je relevantní pouze v případě, že je tlačítko obsaženo v mřížce, a proto je "připojeno" k tlačítkům pomocí mřížky.

<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.

❌ DO NOT put dependency property validation logic in the property's accessors. Místo toho předejte metodě zpětná DependencyProperty.Register volání ověření.

Oznámení o změnách vlastností závislostí

❌ NEimplementujte logiku oznámení o změnách v přístupových objektech vlastností závislostí. Vlastnosti závislostí mají integrovanou funkci oznámení o změnách, která musí být použita zadáním zpětného PropertyMetadatavolání oznámení změn do .

Převod hodnoty vlastnosti závislosti

Převod vlastnosti probíhá, když hodnota zadaná vlastnosti setter je změněna setter před uložením vlastností je skutečně změněna.

❌ NEimplementujte logiku převodu do přístupových objektů vlastností závislostí.

Vlastnosti závislostí mají integrovanou funkci převodu a lze ji použít zadáním zpětného volání převodu do objektu PropertyMetadata.

© Části 2005, 2009 Microsoft Corporation. Všechna práva vyhrazena.

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 v rámci Microsoft Windows Development Series.

Viz také