Come abbiamo visto nello script #68, in Silverlight possiamo memorizzare alcuni oggetti nelle risorse per poterli utilizzare direttamente nel markup, evitando la necessità di dover scrivere codice procedurale.
Solitamente utilizziamo questa modalità per definire oggetti di tipo Style, Template o Storyboard; oltre agli oggetti inclusi nel plug-in possiamo registrare anche oggetti definiti nell'applicazione stessa. Ad esempio, possiamo definire collezioni personalizzate da utilizzare nel markup con le espressioni di data binding.
Per poter condividere la stessa istanza in tutta l'applicazione, tali oggetti possono essere statici:
public partial class MenuItemCollection : ObservableCollection<MenuItem>
{
public static MenuItemCollection Elements { get; set; }
static MenuItemCollection()
{
Elements = new MenuItemCollection()
{
new MenuItem(){
Num=1
, Name="Windows XP"
, BackGroundImage="Images/WinXP.png"
}
, new MenuItem(){
Num=2
, Name="Windows Vista"
, BackGroundImage="Images/WinVista.png"
}
, new MenuItem(){
Num=3
, Name=".NET"
, BackGroundImage="Images/dotnet.png"
}
, new MenuItem(){
Num=4
, Name="XBOX 360"
, BackGroundImage="Images/XBOX360.png"
}
};
}
}Public Class MenuItemCollection
Inherits ObservableCollection(Of MenuItem)
Private Shared _elements As MenuItemCollection
Public Shared Property Elements() As MenuItemCollection
Get
Return _elements
End Get
Set(ByVal value As MenuItemCollection)
_elements = value
End Set
End Property
Shared Sub New()
Elements = New MenuItemCollection()
With Elements
.Add(New MenuItem() With {.Num = 1, .Name = "Windows XP", .BackGroundImage = ""})
.Add(New MenuItem() With {.Num = 2, .Name = "Windows Vista", .BackGroundImage = ""})
.Add(New MenuItem() With {.Num = 3, .Name = ".NET", .BackGroundImage = ""})
.Add(New MenuItem() With {.Num = 4, .Name = ".XBOX 360", .BackGroundImage = ""})
End With
End Sub
End ClassPer condividere la stessa collezione in tutta l'applicazione possiamo definirla come risorsa dell'oggetto Application, dopo aver dichiarato il namespace corrispondente:
<Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:Class="SilverlightItalia.BindingStaticCollection.App" xmlns:local="clr-namespace:SilverlightItalia.BindingStaticCollection"> <Application.Resources> <local:MenuItemCollection x:Key="MenuItemCollection" /> </Application.Resources> </Application>
Infine, possiamo utilizzare tale risorsa nelle espressioni di data binding come useremmo qualunque altra risorsa, facendo attenzione a specificare la proprietà Elements come Path dell'espressione di binding:
<ListBox ItemsSource="{Binding Path=Elements, Source={StaticResource MenuItemCollection}}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>Nell'esempio allegato è possibile verificare l'utilizzo condiviso della collezione in più controlli.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
I più letti di oggi
- Sfruttare una CDN con i bundle di ASP.NET
- Effettuare il multi-checkout in linea nelle pipeline di Azure DevOps
- Gli oggetti CallOut di Expression Blend 4.0
- Effetto turnstile su tutte le pagine con il Windows Phone Toolkit
- Inserire le news di Punto Informatico nel proprio sito
- Alleggerire le applicazioni WPF sfruttando gli oggetti Freezable
- Le DirectInk API nella Universal Windows Platform
- Esaminare documenti XML con namespace utilizzando LINQ to XML


