Click here to Skip to main content
15,881,172 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more: , +
Trying to get the following working with a Panorama on Windows Phone 8:

TemplateSelector class
C#
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
C#
public class CustomTemplateSelector : TemplateSelector
{
    public override DataTemplate SelectTemplate(object item, DependencyObject container)
    {
        var viewModel = item as PageViewModel;

        PageViewModel.Type pageType;

        // Sample data in the designer uses a faked ItemViewModel
        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
XML
<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?
Posted

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900