Custom Dependency properties
Per comprendere appieno l'anatomia delle Dependency Properties, dopo aver esaminato le caratteristiche e il loro utilizzo vediamo come realizzarne una. Non ci soffermiamo sulla classe che la utilizza, ma sui passi necessari affinché una proprietà diventi una Dependency Property.
Per prima cosa le Dependency Properties possono essere utilizzate solamente da classi che derivano, direttamente o indirettamente da DependencyObject, la quale implementa i metodi GetValue, SetValue indispensabili per recuperare o impostare il valore della proprietà.
Nel realizzare la nostra classe difficilmente estendiamo direttamente DependencyObject, ma più realisticamente usiamo come classe base una delle sue classi derivate come ad esempio System.Windows.Control.
Successivamente il property system di WPF deve essere a conoscenza dell'esistenza della proprietà in modo da assegnarli un identificativo univoco per le successive operazioni di lettura/scrittura.
Occorre quindi registrare la proprietà, compito facilmente eseguibile utilizzando uno degli overload del metodo statico DependencyProperty.Register:
public static DependencyProperty Register (string name,
Type propertyType,
Type ownerType)Questo overload del metodo Register è il più semplice. Accetta tre parametri, il primo dei quali è la stringa che rappresenta il nome della proprietà, nome che deve essere univoco nello scopo del tipo. I rimanenti due parametri sono necessari per specificare il Type della proprietà e il Type di cui la proprietà è membro.
public static readonly DependencyProperty NumberProperty =
DependencyProperty.Register("Number",
typeof(int),
typeof(myClass));Nell'implementazione è necessario inoltre rispettare alcune convezioni.
Il campo statico che mantiene il riferimento all'identificativo univoco della Dependency Property deve essere composto dal nome usato per la registrazione della proprietà più il suffisso "Property". Questo campo viene poi usato come identificativo della proprietà dai metodi SetValue e GetValue.
Per rendere l'uso delle Dependance Property più semplice e del tutto identico alle comuni proprietà del Common Language Runtime, come abbiamo già accennato in precedenza, ogni Dependency Property dispone di una proprietà Wrapper, nella sua forma più semplice, simile al codice riportato di seguito:
public int Number {
get { return (int)GetValue(NumberProperty); }
set { SetValue(NumberProperty, value); }
}Sempre per convezione il nome della proprietà wrapper è il medesimo utilizzato per la registrazione della Dependency Property.
Come possiamo notare, non vi è nessun campo per contenere l'effettivo valore della proprietà, infatti questo viene direttamente memorizzato e gestito interamente dal property system di WPF.
Abbiamo più volte dichiarato che ogni Dependency Property dispone della corrispettiva proprietà wrapper, esiste però come accennato in precedenza l'eccezione alla regola: le Attached Properties.
Contenuti dell'articolo
- Pagina 1
- Pagina 3
- Pagina 4
- Pagina 5
Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.





Difficoltà
Stampa
Download 


10annidi.ASPItalia.com: iscriviti alla competizione e vinci fantastici premi ogni mese!
