Silverlight nie zawiera DataTemplateSelector, który jest używany do wybierz szablon danych oparty na elemencie związanym z danymi i obiekcie danych. Ale nie jest trudno budować własne.
Zacznij od klasy, która dziedziczy po System.Windows.Controls.ContentControl. Ta klasa ma właściwość dla szablonu danych i właściwość dla treści, z której można powiązać. Załóż przesterowania metody OnContentChanged jak ten
protected override void OnContentChanged(object oldContent, object newContent)
{
}
wolę umieścić szablony w osobnym słownika, tylko w przypadku muszę podzielić je między projektami. W tej metodzie ustaw szablon tej kontrolki na szablon wybrany ze słownika. Coś takiego:
Switch(DataStatus){
case 0: ContentTemplate = LoadFromDictionary(
"DataTemplateDemo;component/DataTemplates.xaml",
"Status0Template");
break;
case 1: ContentTemplate = LoadFromDictionary(
"DataTemplateDemo;component/DataTemplates.xaml",
"Status1Template");
break;
//etc
}
w tym przypadku powinna to być nazwa słownika DataTemplates.xaml z kilkoma szablonami danych.
W pliku XAML użyć klasy wyboru szablonu jako szablonu listy:
<ListBox x:Name="AnInterrestingList">
<ListBox.ItemTemplate>
<DataTemplate>
<DataTemplateDemo:DateTemplateSelector Content="{Binding}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
używam tej metody pomocnika jak poniżej retreive szablonów ze słowników:
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;
}
Aktualizacja
W międzyczasie napisałem blog z przykładowym kodem na ten temat. Jest dostępny pod numerem my blog.
Szukałem czegoś takiego !, Google + You = Dzięki! –
Sorskoot - Twój wpis na blogu nie jest już dostępny. Czy jest nowy link? – kindohm
Dziękuję .. Zaktualizowałem link ... – Sorskoot