WIn_RustTools/RustTools/Editor/ExplorerItemTemplateSelector.cs
2024-08-13 19:30:40 +08:00

79 lines
1.9 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.UI.Xaml.Controls;
using Microsoft.UI.Xaml;
using System.Collections.ObjectModel;
using System.ComponentModel;
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<ExplorerItem>? m_children;
public ObservableCollection<ExplorerItem> Children
{
get
{
m_children ??= new ObservableCollection<ExplorerItem>();
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();
}
}