Trying to get the following working with a Panorama on Windows Phone 8:
TemplateSelector class
public abstract class TemplateSelector : ContentControl
{
public abstract DataTemplate SelectTemplate(object item, DependencyObject container);
protected override void OnContentChanged(object oldContent, object newContent)
{
base.OnContentChanged(oldContent, newContent);
ContentTemplate = SelectTemplate(newContent, this);
}
}
CustomTemplateSelector class
public class CustomTemplateSelector : TemplateSelector
{
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
var viewModel = item as PageViewModel;
PageViewModel.Type pageType;
if (viewModel == null)
{
Type modelType = item.GetType();
PropertyInfo info = modelType.GetProperty("PageType");
pageType = (PageViewModel.Type)info.GetValue(item, null);
}
else
{
pageType = viewModel.PageType;
}
switch (pageType)
{
case PageViewModel.Type.Welcome:
return WelcomeDataTemplate;
case PageViewModel.Type.Campus:
return CampusDataTemplate;
case PageViewModel.Type.Checklist:
return ChecklistDataTemplate;
case PageViewModel.Type.Social:
return SocialDataTemplate;
case PageViewModel.Type.Register:
return RegisterDataTemplate;
case PageViewModel.Type.Timetable:
return TimetableDataTemplate;
case PageViewModel.Type.Menu:
return MenuDataTemplate;
default:
return WelcomeDataTemplate;
}
}
public DataTemplate WelcomeDataTemplate { get; set; }
public DataTemplate CampusDataTemplate { get; set; }
public DataTemplate ChecklistDataTemplate { get; set; }
public DataTemplate SocialDataTemplate { get; set; }
public DataTemplate RegisterDataTemplate { get; set; }
public DataTemplate TimetableDataTemplate { get; set; }
public DataTemplate MenuDataTemplate { get; set; }
}
XAML Control Template
<ControlTemplate x:Key="TemplateSelector">
<local:CustomTemplateSelector Content="{Binding}"
WelcomeDataTemplate="{StaticResource Welcome}"
CampusDataTemplate="{StaticResource Campus}"
ChecklistDataTemplate="{StaticResource Checklist}"
SocialDataTemplate="{StaticResource Social}"
RegisterDataTemplate="{StaticResource Register}"
TimetableDataTemplate="{StaticResource Timetable}"
MenuDataTemplate="{StaticResource Menu}"
/>
</ControlTemplate>
The PanoramaItem Template is then bound to the TemplateSelector ControlTemplate. The Panorama is bound to a MVVM data source with each PanoramaItem having a unique PageViewModel.Type represented by an enum.
It just doesn't display the a page???
I try to debug and the CustomTemplateSelector code doesn't get run at all...
What am I missing?