Machen Sie die XAML -Sammlungsansichten in Maui.net rekursivC#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Machen Sie die XAML -Sammlungsansichten in Maui.net rekursiv

Post by Anonymous »

Ich erstelle einen benutzerdefinierten Datei -Explorer für meine mobile App in Maui auf .NET 9. Bisher sind die Erstellung und das Laden von Ordner/Datei wiederholt (Code ermöglicht unendliche Verschachtung). Das Problem, auf das ich jetzt begegnet bin, ist jedoch, dass das XAML selbst rekursiv macht, ohne nur immer mehr Sammlungsansichten zu verhindern.

Code: Select all



































































< /code>
Und dies ist der Code dahinter, der die Dateien lädt (scheint in Ordnung zu funktionieren, wenn ich das Verzeichnis auf meinem Telefon inspiziere): < /p>
private void LoadFilesAndFolders()
{
if (Directory.Exists(_myReSEEptImagesFolder))
{
var items = Directory.GetFileSystemEntries(_myReSEEptImagesFolder);

foreach (var item in items)
{
var fileItem = new FileItem
{
Name = Path.GetFileName(item),
Parent = null,
Path = item,
IsFolder = Directory.Exists(item),
Items = new ObservableCollection(),
OnTappedCallback = OpenPath
};

if (fileItem.IsFolder)
{
LoadSubfolderItems(fileItem);
}

FileItems.Add(fileItem);
}
}
}

// Recursive function to load subfolders
private void LoadSubfolderItems(FileItem parentFolder)
{
var subItems = Directory.GetFileSystemEntries(parentFolder.Path);

foreach (var subItem in subItems)
{
var subFileItem = new FileItem
{
Name = Path.GetFileName(subItem),
Parent = parentFolder,
Path = subItem,
IsFolder = Directory.Exists(subItem),
Items = new ObservableCollection(),
OnTappedCallback = OpenPath
};

// If it's a folder, recursively load its children
if (subFileItem.IsFolder)
{
LoadSubfolderItems(subFileItem);
}

parentFolder.Items.Add(subFileItem);
}
}
Hier ist die DateiItem Modellklasse:

Code: Select all

public class FileItem : INotifyPropertyChanged
{
public FileItem? Parent;
private bool _isSelected;
private string _name;
private bool _isFolder;
private ObservableCollection _items;
private bool _isExpanded;
private string _path;

public event PropertyChangedEventHandler PropertyChanged;

public string DisplayName => IsFolder
? (Parent != null ? $"└─ 📁 {Name}" : $"📁 {Name}")
: $"└─ 📜 {Name}";

public bool IsSelected
{
get => _isSelected;
set
{
if (_isSelected != value)
{
_isSelected = value;
OnPropertyChanged(nameof(IsSelected));
}
}
}

public string Name
{
get => _name;
set
{
if (_name != value)
{
_name = value;
OnPropertyChanged(nameof(Name));
OnPropertyChanged(nameof(DisplayName));
}
}
}

public string Path
{
get => _path;
set => SetProperty(ref _path, value);
}

public bool IsFolder
{
get => _isFolder;
set
{
if (SetProperty(ref _isFolder, value) && _isFolder && _items == null)
{
Items = new ObservableCollection();
}
}
}

public bool IsExpanded
{
get =>  _isExpanded;
set
{
_isExpanded = value;
OnPropertyChanged(nameof(IsExpanded));
}
}

public ObservableCollection Items
{
get => _items;
set => SetProperty(ref _items, value);
}

public ICommand TapCommand { get; }

// Callbacks for external handling
public Action OnTappedCallback { get; set; }

public FileItem()
{
TapCommand = new Command(ExecuteTapCommand);
}

private void ExecuteTapCommand()
{
OnTappedCallback?.Invoke(this);
}

protected bool SetProperty(ref T storage, T value, [CallerMemberName] string propertyName = null)
{
if (Equals(storage, value)) return false;
storage = value;

PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
return true;
}

protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post