Dela via


Egenskaper för beroende

Kommentar

Det här innehållet skrivs om med behörighet från Pearson Education, Inc. från Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition. Den utgåvan publicerades 2008, och boken har sedan dess reviderats helt i den tredje utgåvan. En del av informationen på den här sidan kan vara inaktuell.

En beroendeegenskap (DP) är en vanlig egenskap som lagrar värdet i ett egenskapslager i stället för att lagra den i en typvariabel (fält), till exempel.

En bifogad beroendeegenskap är en typ av beroendeegenskap som modelleras som statiska Get- och Set-metoder som representerar "egenskaper" som beskriver relationer mellan objekt och deras containrar (t.ex. positionen för ett Button objekt i en Panel container).

✔️ Ange beroendeegenskaperna om du behöver egenskaperna för att stödja WPF-funktioner som formatering, utlösare, databindning, animeringar, dynamiska resurser och arv.

Design av beroendeegenskap

✔️ ÄRVER från DependencyObject, eller någon av dess undertyper, när du implementerar beroendeegenskaper. Typen ger en mycket effektiv implementering av ett egenskapslager och stöder automatiskt WPF-databindning.

✔️ Ange en vanlig CLR-egenskap och offentligt statiskt skrivskyddat fält som lagrar en instans av System.Windows.DependencyProperty för varje beroendeegenskap.

✔️ IMPLEMENTERA beroendeegenskaper genom att anropa instansmetoder DependencyObject.GetValue och DependencyObject.SetValue.

✔️ NAMNGE det statiska fältet för beroendeegenskapen genom att suffixa namnet på egenskapen med "Egenskap".

❌ Ange INTE standardvärden för beroendeegenskaper uttryckligen i kod. ange dem i metadata i stället.

Om du uttryckligen anger en egenskapsstandard kan du förhindra att egenskapen anges på något implicit sätt, till exempel formatering.

❌ Placera INTE kod i andra egenskapsåtkomster än standardkoden för att få åtkomst till det statiska fältet.

Koden körs inte om egenskapen anges med implicita medel, till exempel en formatering, eftersom formateringen använder det statiska fältet direkt.

❌ Använd INTE beroendeegenskaper för att lagra säkra data. Även egenskaper för privata beroenden kan nås offentligt.

Design av kopplad beroendeegenskap

Beroendeegenskaper som beskrivs i föregående avsnitt representerar inbyggda egenskaper för deklareringstypen. Egenskapen Text är till exempel en egenskap för TextButton, som deklarerar den. En särskild typ av beroendeegenskap är den kopplade beroendeegenskapen.

Ett klassiskt exempel på en bifogad egenskap är egenskapen Grid.Column . Egenskapen representerar button's (inte Grids) kolumnposition, men den är bara relevant om knappen finns i ett rutnät, och därför är den "kopplad" till Knappar efter rutnät.

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

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

Definitionen av en bifogad egenskap ser mest ut som för en vanlig beroendeegenskap, förutom att åtkomsterna representeras av statiska Get- och Set-metoder:

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

Validering av beroendeegenskap

Egenskaper implementerar ofta det som kallas validering. Valideringslogik körs när ett försök görs att ändra värdet för en egenskap.

Beroendeegenskapsåtkomster kan tyvärr inte innehålla godtycklig valideringskod. I stället måste valideringslogik för beroendeegenskap anges under egenskapsregistreringen.

❌ Placera INTE valideringslogik för beroendeegenskap i egenskapens accessorer. Skicka i stället ett valideringsåteranrop till DependencyProperty.Register metoden.

Ändringsmeddelanden för beroendeegenskap

❌ IMPLEMENTERA INTE logik för ändringsmeddelanden i beroendeegenskapsåtkomster. Beroendeegenskaper har en inbyggd funktion för ändringsmeddelanden som måste användas genom att ange ett återanrop för ändringsmeddelanden till PropertyMetadata.

Beroendeegenskap – värdetvång

Egenskapstvång sker när värdet som ges till en egenskapsuppsättning ändras av setter innan egenskapsarkivet faktiskt ändras.

❌ Implementera INTE tvångslogik i beroendeegenskapsåtkomster.

Beroendeegenskaper har en inbyggd tvångsfunktion och kan användas genom att ange ett tvångsåteranrop till PropertyMetadata.

Portioner © 2005, 2009 Microsoft Corporation. Med ensamrätt.

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, publicerad 22 okt 2008 av Addison-Wesley Professional som en del av Microsoft Windows Development Series.

Se även