Megosztás a következőn keresztül:


Függőség tulajdonságai

Feljegyzés

Ezt a tartalmat a Pearson Education, Inc. engedélyével nyomtatjuk újra a Framework Design Guidelines: Conventions, Idioms és Patterns for Reusable .NET Libraries, 2nd Edition engedélyével. Ezt a kiadást 2008-ban adták ki, és a könyvet azóta teljesen átdolgozták a harmadik kiadásban. Előfordulhat, hogy az oldalon található információk némelyike elavult.

A függőségi tulajdonság (DP) egy normál tulajdonság, amely az értékét egy tulajdonságtárolóban tárolja ahelyett, hogy például egy típusváltozóban (mezőben) tárolja.

A csatolt függőségi tulajdonság egy statikus Get és Set metódusként modellezett függőségi tulajdonság, amely az objektumok és tárolóik közötti kapcsolatokat leíró "tulajdonságokat" (például egy Button objektum helyét egy Panel tárolón) írja le.

✔️ A DO adja meg a függőségi tulajdonságokat, ha olyan tulajdonságokra van szüksége, amelyek támogatják a WPF-funkciókat, például a stílust, az eseményindítókat, az adatkötést, az animációkat, a dinamikus erőforrásokat és az öröklést.

Függőségi tulajdonság tervezése

✔️ A DO a függőségi tulajdonságok megvalósításakor örökli DependencyObjecta függőségi tulajdonságokat, vagy annak egyik altípusát. Ez a típus egy tulajdonságtároló nagyon hatékony implementációját biztosítja, és automatikusan támogatja a WPF-adatkötést.

✔️ A DO egy normál CLR-tulajdonságot és egy nyilvános statikus írásvédett mezőt biztosít, amely minden függőségi System.Windows.DependencyProperty tulajdonság egy-egy példányát tárolja.

✔️ DO implementálja a függőségi tulajdonságokat a példány metódusainak DependencyObject.GetValue és DependencyObject.SetValuea .

✔️ DO nevezze el a függőség tulajdonság statikus mezőjét úgy, hogy a tulajdonság nevét a "Tulajdonság" utótaggal adja meg.

❌ NE állítsa be a függőségi tulajdonságok alapértelmezett értékeit explicit módon a kódban; helyett állítsa be őket metaadatokba.

Ha explicit módon állít be alapértelmezett tulajdonságot, megakadályozhatja, hogy a tulajdonságot implicit módon, például stílussal állítsa be.

❌ A statikus mező eléréséhez NE helyezzen kódot a standard kódtól eltérő tulajdonságkiegészítőkbe.

Ez a kód nem lesz végrehajtva, ha a tulajdonság implicit módon van beállítva, például stílussal, mert a stílus közvetlenül a statikus mezőt használja.

❌ NE használjon függőségi tulajdonságokat a biztonságos adatok tárolásához. Még a privát függőségi tulajdonságok is elérhetők nyilvánosan.

Csatolt függőségi tulajdonság tervezése

Az előző szakaszban ismertetett függőségi tulajdonságok a deklarálási típus belső tulajdonságait jelölik; A tulajdonság például Text annak a tulajdonsága TextButton, amely deklarálja azt. A függőségi tulajdonság egy speciális típusa a csatolt függőségi tulajdonság.

A csatolt tulajdonság klasszikus példája a Grid.Column tulajdonság. A tulajdonság a Button (nem Grid) oszloppozícióját jelöli, de csak akkor releváns, ha a gomb egy rácsban található, és így a Gombok rácsok által "csatlakoztatva" van.

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition />
        <ColumnDefinition />
    </Grid.ColumnDefinitions>

    <Button Grid.Column="0">Click</Button>
    <Button Grid.Column="1">Clack</Button>
</Grid>

A csatolt tulajdonságok definíciója többnyire egy normál függőségi tulajdonsághoz hasonlóan néz ki, azzal a kivételrel, hogy a tartozékokat statikus Get és Set metódusok jelölik:

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)
    );
}

Függőségi tulajdonság érvényesítése

A tulajdonságok gyakran implementálják az úgynevezett érvényesítést. Az érvényesítési logika egy tulajdonság értékének módosítására tett kísérlet során fut.

A függőségi tulajdonság tartozékai sajnos nem tartalmazhatnak tetszőleges érvényesítési kódot. Ehelyett a függőségi tulajdonság érvényesítési logikáját kell megadni a tulajdonságregisztráció során.

❌ NE helyezzen függőségi tulajdonságérvényesítési logikát a tulajdonság tartozékaiba. Ehelyett adjon át egy érvényesítési visszahívást a metódusnak DependencyProperty.Register .

Függőségi tulajdonság változási értesítései

❌ NE implementálja a változásértesítési logikát a függőségi tulajdonság tartozékaiban. A függőségi tulajdonságok beépített változásértesítési funkcióval rendelkeznek, amelyet a változásértesítés visszahívásával kell használni.PropertyMetadata

Függőségi tulajdonságérték kényszerítése

A tulajdonság kényszerítése akkor történik, ha a tulajdonságkészlet-tároló tényleges módosítása előtt a setter módosítja a tulajdonsághalmaznak adott értéket.

❌ NE implementáljon kényszerítési logikát a függőségi tulajdonság tartozékaiban.

A függőségi tulajdonságok beépített kényszerítési funkcióval rendelkeznek, és a kényszer visszahívásával használhatók a PropertyMetadata.

© Részletek 2005, 2009 Microsoft Corporation. Minden jog fenntartva.

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 22, 2008 by Addison-Wesley Professional, a Microsoft Windows Development Series részeként.

Lásd még