Silverlight non contiene un DataTemplateSelector, che viene utilizzato per selezionare un modello di dati basato sull'elemento associato ai dati e l'oggetto dati. Ma non è difficile costruirne uno tuo.
Iniziare con una classe che eredita da System.Windows.Controls.ContentControl. Questa classe ha una proprietà per un modello di dati e una proprietà per il contenuto, che è possibile utilizzare per associare. Creare un override del metodo OnContentChanged come questo
protected override void OnContentChanged(object oldContent, object newContent)
{
}
preferisco mettere i modelli in un dizionario a parte, nel caso in cui ho bisogno di condividerli tra i progetti. In questo metodo, il modello di questo controllo viene impostato su un modello selezionato dal dizionario. Qualcosa di simile:
Switch(DataStatus){
case 0: ContentTemplate = LoadFromDictionary(
"DataTemplateDemo;component/DataTemplates.xaml",
"Status0Template");
break;
case 1: ContentTemplate = LoadFromDictionary(
"DataTemplateDemo;component/DataTemplates.xaml",
"Status1Template");
break;
//etc
}
in questo caso l'dovrebbe essere un nome DataTemplates.xaml dizionario con un paio di modelli di dati.
Nel file XAML, utilizzare la classe di selezione modello come il modello della lista:
<ListBox x:Name="AnInterrestingList">
<ListBox.ItemTemplate>
<DataTemplate>
<DataTemplateDemo:DateTemplateSelector Content="{Binding}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Io uso questo metodo di supporto come qui sotto per prelevare i modelli da dizionari:
public static DataTemplate LoadFromDictionary(string dictionary,
string template)
{
var doc = XDocument.Load(dictionary);
var dict = (ResourceDictionary)XamlReader
.Load(doc.ToString(SaveOptions.None));
return dict[template] as DataTemplate;
}
Aggiornamento
Nel frattempo ho scritto un post con un codice di esempio su questo argomento. È disponibile su my blog.
State cercando qualcosa di simile !, Google + You = Grazie! –
Sorskoot: il tuo post sul blog non sembra più disponibile. C'è un nuovo link? – kindohm
Grazie .. Ho aggiornato il collegamento ... – Sorskoot