Risposte:
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.
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 :)
Grid.Row="1"
on a Button
lo imposterà nella riga n. 2 sul genitore Grid
(a causa del fatto che le righe sono basate su zero) ma Row
DependencyProperty appartiene Grid
all'oggetto.
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!
Value
proprietà (non DP) con valore 0 e desideri che la tua vista faccia qualcosa quando Value
cambia in 1. Sarai in grado di farlo usando DataTrigger
e impostandoBinding={Binding Path=Value, Value=1}
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à.