Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
UWP选项卡视图ItemTemplateSelector不工作_Uwp_Windows Community Toolkit - Fatal编程技术网

UWP选项卡视图ItemTemplateSelector不工作

UWP选项卡视图ItemTemplateSelector不工作,uwp,windows-community-toolkit,Uwp,Windows Community Toolkit,我有一个带有Pivot控件的UWP页面,其中ItemTemplateSelector绑定到DataTemplateSelector派生的类。代码按预期工作,下面是XAML代码段 <Pivot IsHeaderItemsCarouselEnabled="False" ItemsSource ="{x:Bind MainPageViewModel.EditViewModels}" ItemTemplateSelector="{StaticResource DetailViewTempla

我有一个带有Pivot控件的UWP页面,其中ItemTemplateSelector绑定到DataTemplateSelector派生的类。代码按预期工作,下面是XAML代码段

<Pivot IsHeaderItemsCarouselEnabled="False" 
ItemsSource ="{x:Bind MainPageViewModel.EditViewModels}"  
ItemTemplateSelector="{StaticResource DetailViewTemplateSelector}"  >
<Pivot.HeaderTemplate>
<DataTemplate >
<TextBlock Text="New Item"/>
</DataTemplate>
</Pivot.HeaderTemplate>
</Pivot>

我有一个资源字典,其中数据模板定义为:

<DataTemplate x:Key="Tabela_DetailViewModel" >
<detailView:Tabela_View />
</DataTemplate>   

代码按预期工作。当我向itemsource添加对象时,将创建新的透视项目,并使用用户控件选项卡视图呈现其内容

我将Pivot控件从Microsoft.Toolkit.Uwp.UI.Controls nampespace更改为TabView。更改控件后,当我打开新选项卡时,将呈现类型名称而不是用户控件视图。 以下是选项卡视图的XAML:

<muxc:TabView x:Name="Tabs" Grid.Column="1" Grid.Row="0"   
ItemsSource ="{x:Bind MainPageViewModel.EditViewModels}"          
SelectedItem="{x:Bind MainPageViewModel.SelectedEntityViewModel,Mode=TwoWay}"
ItemTemplateSelector="{StaticResource DetailViewTemplateSelector}"    >
<muxc:TabView.ItemHeaderTemplate>
<DataTemplate >
<TextBlock Text="New Item"/>
</DataTemplate>
</muxc:TabView.ItemHeaderTemplate>
</muxc:TabView>

下面是模拟此错误的项目的链接。请注意,已注释的pivot控件片段按预期工作

任何帮助都将不胜感激。 当做 赛菲

UWP选项卡视图ItemTemplateSelector不工作

我已经测试了
ItemTemplateSelector
,它在我这边运行得很好,请参考下面的代码检查您是否遗漏了一些关键步骤

建立数据模型

public class TabItem
{
    public ItemType Type { get; set; }
    public string Header { get; set; }
    public Microsoft.UI.Xaml.Controls.IconSource Icon { get; set; }
}
public enum ItemType { TypeA, TypeB };
使
TabViewItemTemplateSelector
类继承
DataTemplateSelector

public class TabViewItemTemplateSelector : DataTemplateSelector
{
    public DataTemplate TemplateOne { get; set; }
    public DataTemplate TemplateTwo { get; set; }

    protected override DataTemplate SelectTemplateCore(object item)
    {
        var tabItem = (TabItem)item;
        return tabItem.Type == ItemType.TypeA ? TemplateOne : TemplateTwo;
    }
}
Xaml代码

<Page.Resources>
    <local:TabViewItemTemplateSelector
        x:Key="TabViewItemTemplateselector"
        TemplateOne="{StaticResource Templateone}"
        TemplateTwo="{StaticResource Templatetwo}"
        />
    <DataTemplate x:Key="Templateone" x:DataType="local:TabItem">
        <muxc:TabViewItem Header="{x:Bind Header}" IconSource="{x:Bind Icon}" >
            <detailview:Tabela_View/>
        </muxc:TabViewItem>
    </DataTemplate>
    <DataTemplate x:Key="Templatetwo" x:DataType="local:TabItem" >
        <muxc:TabViewItem Header="{x:Bind Header}" IconSource="{x:Bind Icon}" >
            <detailview:NormalPage/>
        </muxc:TabViewItem>
    </DataTemplate>
</Page.Resources>

用法

<muxc:TabView
    x:Name="MyTabView"
    Grid.Row="0"
    Grid.Column="1"
    TabItemTemplateSelector="{StaticResource TabViewItemTemplateselector}"
    />


MyTabView.TabItemsSource = new List<TabItem>() {
    new TabItem(){ Header="One", Icon = new Microsoft.UI.Xaml.Controls.SymbolIconSource(){ Symbol= Symbol.DockBottom},Type=ItemType.TypeA },
     new TabItem(){ Header="Two",  Icon = new Microsoft.UI.Xaml.Controls.SymbolIconSource(){ Symbol= Symbol.Document},Type=ItemType.TypeB },
      new TabItem(){ Header="Three",  Icon = new Microsoft.UI.Xaml.Controls.SymbolIconSource(){ Symbol= Symbol.Accept},Type=ItemType.TypeA }
};

MyTabView.TabItemsSource=新列表(){
新选项卡项(){Header=“One”,Icon=new Microsoft.UI.Xaml.Controls.SymbolIconSource(){Symbol=Symbol.DockBottom},Type=ItemType.TypeA},
新建TabItem(){Header=“Two”,Icon=new Microsoft.UI.Xaml.Controls.SymbolIconSource(){Symbol=Symbol.Document},Type=ItemType.TypeB},
新建TabItem(){Header=“Three”,Icon=new Microsoft.UI.Xaml.Controls.SymbolIconSource(){Symbol=Symbol.Accept},Type=ItemType.TypeA}
};

感谢您的回复。如果你能检查一下我在原始帖子中附上的样本的扭结,我将不胜感激。在我的解决方案中,我按照你在回答中的建议做了。区别在于我使用的是一个合并的资源字典,它定义了模板选择器应该使用的数据模板。在模板选择器中,我根据视图模型类型从资源中检索模板。在这个示例中,您可以看到相同的代码如何使用Pivot而不是选项卡。如果您能看一下示例中的代码,看看是否能理解其中的内容,我将不胜感激。还有一点,我不能在资源字典中使用x:DataType。它生成编译错误[XAML二进制格式(XBF)生成器报告的语法错误“0x09C4]”。请注意,缺少x:DataType对于Pivot控件不是问题。您可以删除
x:DataType
并使用绑定方案。