Windows Phone 8 Panorama自定义DataTemplateSelector [英] Windows Phone 8 Panorama Custom 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屋!