Le Dependency Property, introdotte per permettere funzionalità avanzate direttamente dal linguaggio di markup, sono un altro tassello fondamentale di Silverlight, che consente di calcolare il valore di una proprietà in base al valore di altri input, per questo motivo vengono sfruttate dall'engine di presentazione per il data binding, le animazioni, gli stili e molto altro.
Si trata di normali proprietà di classi .NET, ma che hanno una particolare struttura che le rende fruibili da Silverlight in modo speciale; nessun linguaggio .NET a parte XAML le riconosce come tali.
Gli oggetti che ereditano direttamente dalla classe DependencyObject espongono la maggior parte delle proprietà come Dependecy Property, questo permette loro di supportare le animazioni. Ma per i tipi derivati dal FrameworkElement, queste proprietà supportanto anche il data binding e gli stili.
Identificare le Dependency Property è molto semplice dato che per convenzione, tutti i campi di questo tipo sono pubblici, statici e hanno il suffisso Property.
Poiché le Dependency Property sono campi statici, esse consumano una quantità di memoria molto inferiore rispetto alle tipiche proprietà .NET di cui esiste in memoria una copia per ogni istanza dell'oggetto che le espone, di fatto in Silverlight 2 la maggior parte delle proprietà esposte da un controllo sono Dependency Property.
Per implementare una Dependency Property all'interno di un elemento che eredita da DependencyObject o un oggetto derivato come per esempio FrameworkElement dobbiamo:
System.Windows.DependencyPropertyDependencyProperty.Register, anche esso statico, il quale richiede come parametri, il nome, il tipo della proprietà, il tipo della classe che la espone e il metodo di callback che viene invocato quando il valore della proprietà cambiaGetValue e SetVaule della classe base System.Windows.DependencyObjectPer esempio definiamo una proprietà IsFocused di tipo boolean per una classe DependencyPropertyDemo:
public class DependencyPropertyDemo : DependencyObject
{
public static readonly DependencyProperty IsFocusedProperty;
static DependencyPropertyDemo()
{
IsFocusedProperty = DependencyProperty.Register("IsFocused", typeof(bool), typeof(DependencyPropertyDemo), new PropertyMetadata(new PropertyChangedCallback(OnIsFocusedPropertyChanged)));
}
public bool IsFocused
{
get { return (bool)GetValue(IsFocusedProperty); }
protected internal set { SetValue(IsFocusedProperty, value); }
}
private static void OnIsFocusedPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
// qui va inserita l'eventuale logica applicativa
// da eseguire quando il valore della proprietà è stato modoficato
}
}
Essendo le Dependency Property delle proprietà statiche modificabili da diverse fonti e funzionalità (data binding, animazioni, stili, etc.), il Property System di Silverlight 2 prevede una gestione della priorità per decidere quale sarà l'effettivo valore finale di una Dependency Property.
Di seguito viene riportato l'ordine utilizzato dal Property System per l'assegnazione dei valori a runtime delle Dependency Property:
LINQ e la trappola della 'deferred execution'Una "trappola" in cui si può incappare utilizzando il risultato di... |
C#, le Custom Type ConversionConversioni personalizzate tra classi, creare metodi particolari per... |
Introduzione a Entity FrameworkIl framework ORM messo a disposizione da .NET |
Repeater: visualizzare un feed RSSUtilizzare il controllo XMLDataSource e sfruttare il metodo XPath()... |
Repeater, il server control "semplice"Cos'è e come funziona il controllo Repeater |
Guida ASP.NET MVC Best PracticesUn workflow dettagliato e ricco di suggerimenti pratici per... |
Guida ASP.NET Starter KitUn modo semplice per imparare ad utilizzare le tecnologie Microsoft... |
Guida Visual Studio 2010L'ambiente di sviluppo di riferimento per sviluppare applicazioni su... |
Ogni giovedì, direttamente nella tua e-mail: articoli, guide, tutorial e script ASP, ASP.Net, SQL server e IIS.
Iscriviti alla newsletter
|
|
Corso Progettazione database11 Maggio 2012 a Milano |
|
|
Amministratore di Reti Windows Server 200811 Giugno 2012 a Milano |
|
Nessun corso previsto |