Che cos'è una proprietà di dipendenza?


Risposte:


94

Le proprietà di dipendenza sono proprietà delle classi che derivano da DependencyObject, e sono speciali in questo piuttosto che semplicemente usando un campo di supporto per memorizzare il loro valore, usano alcuni metodi di supporto su DependencyObject.

La cosa più bella di loro è che hanno tutti gli impianti idraulici per l'associazione dei dati incorporati. Se vincoli qualcosa a loro, te lo avviseranno quando cambiano.


36
Questo mi dice ancora molto poco su cosa può fare una proprietà di dipendenza o perché esiste. Non menzioni nulla della loro proprietà più preziosa, la risoluzione del valore sull'albero degli elementi.
ProfK

ciao @MHattilton grazie per la tua risposta, ma cosa intendi con "usano alcuni metodi di supporto su DependencyObject"?
BKSpurgeon,

2
@BKSpurgeon DependencyObject ha alcuni metodi come "SetValue" e "GetValue" che chiamate per salvare / leggere il valore di una proprietà di dipendenza, anziché utilizzare un campo di supporto.
Matt Hamilton,

91

L'unica spiegazione che ho trovato utile e ben scritta è questa: http://www.wpftutorial.net/dependencyproperties.html

Fondamentalmente, DependencyProperties differisce dalle normali proprietà in quanto non sono solo setter / getter per i campi nella classe, ma recuperano i loro valori effettivi in ​​modo dinamico durante il runtime. Il SetValue()metodo di DP è piuttosto semplice e imposta il valore locale della proprietà sul valore che gli hai dato. Tuttavia, quando provi GetValue()da una DependencyProperty, cercherà prima un valore locale, se non è presente nessuno (che è fattibile in DependencyProperties a differenza delle proprietà normali) continuerà sull'albero dell'interfaccia utente logica fino a quando non troverà tale valore. Se il framework ha raggiunto la cima dell'albero senza trovare alcun valore locale, utilizzerà quindi un valore predefinito predefinito come valore della proprietà.

Questo metodo consente a DependencyProperties di consumare meno memoria rispetto alle proprietà normali poiché solo i valori impostati esplicitamente dall'utente verranno archiviati localmente.

E, come accennato in precedenza, DependencyProperties ci consente anche di associarli a loro nel codice XAML e impostare trigger su di essi, che su proprietà regolari non sono consentiti.

Spero di essere riuscito a cancellare un po 'della vaghezza :)


2
E cos'è una "proprietà collegata"?
Paul-Sebastian Manole,

12
Una proprietà collegata è una proprietà che non appartiene all'elemento corrente che viene dichiarato, ma influisce su un altro oggetto. Ad esempio: Grid.Row="1"on a Buttonlo imposterà nella riga n. 2 sul genitore Grid(a causa del fatto che le righe sono basate su zero) ma RowDependencyProperty appartiene Gridall'oggetto.
Jonathan Perry,

2
Quando hai detto DependencyProperties also allow us to bind to them in the XAML code and set triggers on them, which on regular properties is not allowed, intendevi dire sia il binding in XAML che l'impostazione di trigger o semplicemente l'impostazione di trigger non è consentita. Grazie per il seguito e per aver contribuito a chiarire le cose!
Paul-Sebastian Manole,

@ Paul-SebastianManole DataTriggers funziona anche su proprietà regolari. Supponiamo che tu abbia una Valueproprietà (non DP) con valore 0 e desideri che la tua vista faccia qualcosa quando Valuecambia in 1. Sarai in grado di farlo usando DataTriggere impostandoBinding={Binding Path=Value, Value=1}
Jonathan Perry il

36

http://techpunch.wordpress.com/2008/09/25/wpf-wf-what-is-a-dependency-property/ fornisce una buona spiegazione delle proprietà di dipendenza sia nel contesto di WF che di WPF.

Un estratto:

Punto chiave: il valore delle proprietà di dipendenza viene risolto

L'obiettivo finale di una proprietà di dipendenza, come qualsiasi proprietà, è gestire lo stato. A differenza delle normali proprietà .Net, il valore della proprietà locale non è memorizzato in una variabile di istanza.

Al contrario, le proprietà di dipendenza vengono registrate con il framework delle proprietà di dipendenza e il valore della proprietà sottostante viene risolto, ovvero il valore viene determinato dal framework delle proprietà di dipendenza in base alle regole definite dalla registrazione della proprietà.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.