using System.Collections.ObjectModel; using System.ComponentModel; using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Controls; namespace RustTools.Editor; public class ExplorerItemTemplateSelector : DataTemplateSelector { public DataTemplate FolderTemplate { get; set; } public DataTemplate FileTemplate { get; set; } protected override DataTemplate SelectTemplateCore(object item) { var explorerItem = (ExplorerItem)item; return explorerItem.Type == ExplorerItem.ExplorerItemType.Folder ? FolderTemplate : FileTemplate; } } public class ExplorerItem : INotifyPropertyChanged { public enum ExplorerItemType { Folder, File }; public event PropertyChangedEventHandler PropertyChanged; public string? Name { get; set; } public ExplorerItemType Type { get; set; } public string? Dir { get; set; } private ObservableCollection? m_children; public ObservableCollection Children { get { m_children ??= new ObservableCollection(); return m_children; } set => m_children = value; } private bool m_isExpanded; public bool IsExpanded { get => m_isExpanded; set { if (m_isExpanded != value) { m_isExpanded = value; NotifyPropertyChanged(nameof(IsExpanded)); } } } private void NotifyPropertyChanged(string propertyName) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } public static implicit operator ExplorerItem(bool v) { throw new NotImplementedException(); } }