Xaml 未执行UWP TreeView ItemTemplateSelector

Xaml 未执行UWP TreeView ItemTemplateSelector,xaml,uwp,treeview,Xaml,Uwp,Treeview,我正在使用的TreeView不会执行ItemTemplateSelector,不管我在XAML和代码隐藏中声明了它 以下是我在XAML中的页面资源: <DataTemplate x:Key="FolderTemplate" x:DataType="localdata:FolderInfo"> <TreeViewItem ItemsSource="{x:Bind subFolders}"> <StackPanel Orienta

我正在使用的TreeView不会执行
ItemTemplateSelector
,不管我在XAML和代码隐藏中声明了它

以下是我在XAML中的页面资源:

<DataTemplate x:Key="FolderTemplate" x:DataType="localdata:FolderInfo">
        <TreeViewItem ItemsSource="{x:Bind subFolders}">
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="#Folder#" />
                <Image Width="20" Source="Assets/img2.png"/>
                <TextBlock Text="{x:Bind  FolderName }" />
            </StackPanel>
        </TreeViewItem>
    </DataTemplate>

    <DataTemplate x:Key="FileTemplate" x:DataType="localdata:FolderInfo">
        <TreeViewItem>
            <StackPanel Orientation="Horizontal">
                <Image Width="20" Source="Assets/img3.png"/>
                <TextBlock Text="{x:Bind FolderName}"/>
            </StackPanel>
        </TreeViewItem>
    </DataTemplate>


    <localdata:ExplorerItemTemplateSelector
        x:Key="ExplorerItemTemplateSelector"
        FolderTemplate="{StaticResource FolderTemplate}"
        FileTemplate="{StaticResource FileTemplate}" />
在我的代码隐藏文件中:

public class ExplorerItemTemplateSelector : DataTemplateSelector
{
    public DataTemplate FolderTemplate { get; set; }
    public DataTemplate FileTemplate { get; set; }

    protected override DataTemplate SelectTemplateCore(object item, DependencyObject container)
    {
        var explorerItem = (FolderInfo)item;
        if (explorerItem.IsFolder == true) return FolderTemplate;

        return FileTemplate;
    }
}

绑定工作正常。为了消除混乱,我在这篇评论中省略了VM。有趣的是,如果我从TreeView的声明中删除
ItemTemplateSelector=“{StaticResource ExporItemTemplateSelector}”
,它在视觉或功能上没有任何变化。

DataTemplateSelector类型实际上有两个不同的
SelectTemplateCore
方法重载,
TreeView
使用第二个,只有一个
对象
参数:

public class ExplorerItemTemplateSelector : DataTemplateSelector
{
    public DataTemplate FolderTemplate { get; set; }
    public DataTemplate FileTemplate { get; set; }

    protected override DataTemplate SelectTemplateCore(object item)
    {
        var explorerItem = (FolderInfo)item;
        if (explorerItem.IsFolder == true) return FolderTemplate;

        return FileTemplate;
    }
}

在此表单中,应按预期调用该方法。

数据模板选择器类型实际上有两个不同的
SelectTemplateCore
方法重载,
TreeView
使用第二个方法,只有一个
对象
参数:

public class ExplorerItemTemplateSelector : DataTemplateSelector
{
    public DataTemplate FolderTemplate { get; set; }
    public DataTemplate FileTemplate { get; set; }

    protected override DataTemplate SelectTemplateCore(object item)
    {
        var explorerItem = (FolderInfo)item;
        if (explorerItem.IsFolder == true) return FolderTemplate;

        return FileTemplate;
    }
}

在此表单中,应按预期调用该方法。

感谢您的回复。我赞成你的答案。在使用选择器时发现我需要删除ItemTemplate。感谢回复。我赞成你的答案。发现在使用选择器时需要删除ItemTemplate。