Windows Phone 8 Panorama自定义DataTemplateSelector [英] Windows Phone 8 Panorama Custom DataTemplateSelector

查看:93
本文介绍了Windows Phone 8 Panorama自定义DataTemplateSelector的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

尝试在Windows Phone 8上使用Panorama进行以下操作:



TemplateSelector类

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类


CustomTemplateSelector class

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控制模板


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>



然后将PanoramaItem模板绑定到TemplateSelector ControlTemplate。 Panorama绑定到MVVM数据源,每个PanoramaItem都有一个由枚举表示的唯一PageViewModel.Type。



它只是不显示一个页面? ?



我尝试调试并且CustomTemplateSelector代码根本无法运行...



我缺少什么?


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?

推荐答案

这篇关于Windows Phone 8 Panorama自定义DataTemplateSelector的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆