Domanda

Che cos'è una proprietà di dipendenza in .Net (specialmente nel contesto WPF). Qual è la differenza dalla proprietà normale?

È stato utile?

Soluzione

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.

Altri suggerimenti

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 della classe, ma recuperano dinamicamente i loro valori effettivi durante il runtime. Il metodo SetValue () dei DP è piuttosto semplice e imposta il valore locale della proprietà sul valore che gli hai dato. Tuttavia, quando si tenta di GetValue () da DependencyProperty, cercherà prima di tutto un valore locale, se non è presente nessuno (che è praticabile in DependencyProperties a differenza delle normali proprietà) continuerà l'interfaccia utente logica albero 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 :)

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, il che significa che il valore viene determinato dal framework delle proprietà di dipendenza in base alle regole definite dalla registrazione della proprietà.

Spiegazione senza codice tramite analogia (~ 5 min)

Se non ti piacciono le storie, salva te stesso (~ 5 minuti)

Dovremo esaminare alcuni concetti:

  • Risoluzione del valore sull'albero / proprietà Eredità del valore e
  • Supporto multi-provider
  • Notifiche di modifica

(a) Risoluzione valore / Eredità valore proprietà

Usiamo l'esempio dei geni umani per spiegare il concetto.

Tutti sono più o meno gli stessi

Gli esseri umani hanno molte informazioni associate a loro. Innumerevoli centinaia e migliaia di dati sono associati a te & # 8211;

  • quante dita hai,

  • quante dita,

  • quanti geni BRCA2 hai ecc

Qual è il problema che vogliamo risolvere?

Vogliamo essere in grado di dare risposte dirette alle persone che ci chiedono di noi stessi senza trascinarsi dietro tutte queste informazioni.

Quindi la domanda è: come puoi ricordare tutto ciò? Beh, in origine la gente ha iniziato a scrivere tutta questa roba, ma presto si sono resi conto che avrebbero dovuto portare circa 10 volumi delle pagine gialle & # 8211; fondamentalmente l'intera biblioteca di Alessandria (in formato cartaceo) nella loro tasca posteriore per poter rispondere a tutte quelle domande: quella è senza dubbio troppa roba da portare in giro.

Soluzione: conservare le informazioni comuni in un unico posto

Quindi qualcuno ha avuto un'idea brillante. Hanno notato che la maggior parte delle volte le informazioni sono le stesse. per esempio. Molte persone hanno:

  • un cuore

  • una faccia ecc.

  • tre geni BRCA2

Non è necessario che ogni singola persona porti circa 30 libbre di carta nella tasca posteriore. Puoi archiviare tutte queste informazioni in un posto , in una libreria centrale. Le persone sarebbero libere di camminare senza essere gravate dal trasporto di tali informazioni.

Ma ci sono sempre delle eccezioni ... non tutti hanno lo stesso gruppo sanguigno o lo stesso numero di follicoli piliferi in testa. Se ci sono differenze o eccezioni alla norma, allora devi semplicemente portare con te quelle eccezioni con te nella tasca posteriore (cioè in un dizionario), anziché in un'intera libreria di libri. Ricorda, per la maggior parte, le persone sono praticamente le stesse: condividono gli stessi valori e questo raramente cambia. Se non hai eccezioni scritte nella tasca posteriore, puoi semplicemente riferire l'intervistatore ai dati memorizzati nel repository comune.

Esempio: il giornalista intervista il presidente Donald Trump **

Proviamo questo con un esempio.

Abbiamo un'istanza di Person: Donald Trump. Un giornalista sta ponendo alcune domande al nostro stimato Presidente:

  

& # 8220; Signor Presidente Trump, quanti geni HIF1A possiede? & # 8221;

Il Don controlla la tasca posteriore. Non c'è nulla elencato lì su quanti geni ha. Quindi dice semplicemente al giornalista che ha il numero predefinito che tutti gli altri hanno. " Come tutti gli altri " dice Trump. " Puoi trovare la tua risposta nella libreria " ;. Quindi il giornalista va semplicemente in biblioteca per scoprire quel particolare dettaglio.

  

& # 8220; Signor Presidente Trump, quante facce hai?

Questo valore può essere risolto localmente? Sembra che questo valore sia risolto localmente perché nella tasca posteriore di Trumps c'è la risposta: 2 - che viene prontamente restituita al giornalista.

Risoluzione del valore su un albero

In realtà, le cose sono un po 'più complicate di una risposta: essere nella tasca posteriore o essere tenuti in una biblioteca centrale. Ci sono molti posti intermedi che potrebbero archiviare le stesse informazioni e, quindi, sarebbero i candidati ideali per "risolvere il valore della proprietà". Quindi le cose potrebbero iniziare nella tasca posteriore, quindi il giornalista potrebbe dover controllare un sacco di posti intermedi, in ordine crescente, per ottenere la risposta. per esempio. il giornalista potrebbe iniziare con altri giornali, quindi con documenti del tribunale e fallendo tutto ciò, se non viene trovata alcuna risposta, la risposta è il valore predefinito contenuto nella biblioteca centrale.

Per semplificarlo, le cose vengono risolte prima con la persona, quindi verso l'alto e verso autorità sempre più alte: alla fine finiscono con Dio o il mostro Spaghetti, a seconda dei casi. Alla fine, continui ad andare sempre più in alto finché non ottieni una risposta. Alla fine, tutte le risposte vengono risolte.

Sommario

In breve, una proprietà di dipendenza è una proprietà che viene risolta localmente o nell'albero dell'interfaccia utente, a seconda dei casi. Il motivo per cui lo facciamo è perché gli elementi dell'interfaccia utente hanno centinaia e centinaia di proprietà che presto consumerebbero la tua memoria se li memorizzassi come campi di supporto per ognuno di essi. Poiché la maggior parte di questi campi non cambia mai o molto raramente, non è necessario memorizzarli come campi di supporto e i loro valori possono essere risolti risalendo l'albero.

Infine, ricevi automaticamente la notifica di modifica automatica.

Certo, l'analogia è un po 'tesa, ma spero che sia utile.

** Sto ancora aspettando sul (fuoco) muro che Trump ha promesso. Devo tenere fuori gli Spamicani.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top