Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Anmärkning
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.
Beroendeegenskapsdesign
✔️ Ä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.
Se till att du anger en vanlig CLR-egenskap och ett offentligt statiskt skriverfritt 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.
✔️ Ge det statiska fältet för dependency property namnet genom att lägga till "Property" som suffix till egenskapens namn.
❌ 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 knappens (inte Grids) kolumnposition, men den är bara relevant om knappen finns i en Grid, och därför är den associerad med knappar via Grid.
<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.
Meddelanden vid förändringar av beroendeegenskaper
❌ 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 ändringsmeddelandeåteranrop till PropertyMetadata.
Beroendeegenskapsvärdetvång
Egenskapstvång sker när värdet som ges till en egenskapsinställare ändras av inställaren innan egenskapslagringen 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. Alla rättigheter reserverade.
Återtryckt med tillstånd från Pearson Education, Inc. från Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition av Krzysztof Cwalina och Brad Abrams, publicerades den 22 oktober 2008 av Addison-Wesley Professional som en del av Microsoft Windows Development Series.