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}" />
Вот объявление TreeView
, оно использует Style
, но оно не имеет значения для этого обзора:
<TreeView
x:Name="treeview" Grid.Row="2" ItemsSource="{Binding storageFolders,Mode=OneWay}"
Style="{StaticResource TreeViewStyle1}"
ItemTemplateSelector="{StaticResource ExpolrerItemTemplateSelector}"
>
<TreeView.ItemTemplate>
<DataTemplate x:DataType="localdata:FolderInfo">
<TreeViewItem ItemsSource="{x:Bind subFolders}" Content="{x:Bind FolderName}"/>
</DataTemplate>
</TreeView.ItemTemplate>
</TreeView>
и в моем коде за файлом:
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 из этого обзора, чтобы удалить беспорядок. Также интересно то, что если я уберу ItemTemplateSelector="{StaticResource ExpolrerItemTemplateSelector}"
из объявления TreeView, он будет работать без каких-либо изменений в визуальном или функциональном смысле.