From 3d174bf65f498e283e2bfb8b940cbfcef3958026 Mon Sep 17 00:00:00 2001 From: rabbitism Date: Wed, 26 Jul 2023 16:42:17 +0800 Subject: [PATCH] feat: add hierarchical demo. --- .../Converters/FileIconConverter.cs | 28 ++ .../MainWindow.axaml | 115 +++++- .../MainWindow.axaml.cs | 12 +- .../ViewModels/FilesPageViewModel.cs | 376 ++++++++++++++++++ .../ViewModels/MainViewModel.cs | 3 +- .../ViewModels/SongsPageViewModel.cs | 35 +- src/Semi.Avalonia.TreeDataGrid/Shared.axaml | 5 +- .../TreeDataGrid.axaml | 16 +- 8 files changed, 569 insertions(+), 21 deletions(-) create mode 100644 demo/Semi.Avalonia.TreeDataGrid.Demo/Converters/FileIconConverter.cs diff --git a/demo/Semi.Avalonia.TreeDataGrid.Demo/Converters/FileIconConverter.cs b/demo/Semi.Avalonia.TreeDataGrid.Demo/Converters/FileIconConverter.cs new file mode 100644 index 0000000..0ed4943 --- /dev/null +++ b/demo/Semi.Avalonia.TreeDataGrid.Demo/Converters/FileIconConverter.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Globalization; +using Avalonia; +using Avalonia.Data.Converters; +using Avalonia.Media; +using Avalonia.Metadata; + +namespace Semi.Avalonia.TreeDataGrid.Demo.Converters; + +public class FileIconConverter: IMultiValueConverter +{ + [Content] + public Dictionary Items { get; set; } = new Dictionary(); + + public object? Convert(IList values, Type targetType, object? parameter, CultureInfo culture) + { + if (values[0] is bool isDirectory && values[1] is bool isOpen) + { + if (!isDirectory) + { + return Items["file"]; + } + return isOpen ? Items["folderOpen"] : Items["folderClosed"]; + } + return AvaloniaProperty.UnsetValue; + } +} \ No newline at end of file diff --git a/demo/Semi.Avalonia.TreeDataGrid.Demo/MainWindow.axaml b/demo/Semi.Avalonia.TreeDataGrid.Demo/MainWindow.axaml index 18d2f7b..a86cfd2 100644 --- a/demo/Semi.Avalonia.TreeDataGrid.Demo/MainWindow.axaml +++ b/demo/Semi.Avalonia.TreeDataGrid.Demo/MainWindow.axaml @@ -2,19 +2,128 @@ x:Class="Semi.Avalonia.TreeDataGrid.Demo.MainWindow" xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" + xmlns:converters="clr-namespace:Semi.Avalonia.TreeDataGrid.Demo.Converters" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:vm="clr-namespace:Semi.Avalonia.TreeDataGrid.Demo.ViewModels;assembly=Semi.Avalonia.TreeDataGrid.Demo" Title="Semi.Avalonia.TreeDataGrid.Demo" d:DesignHeight="450" d:DesignWidth="800" - x:DataType="vm:SongsPageViewModel" + x:DataType="vm:MainViewModel" mc:Ignorable="d"> + + + M14,2H6A2,2 0 0,0 4,4V20A2,2 0 0,0 6,22H18A2,2 0 0,0 20,20V8L14,2M18,20H6V4H13V9H18V20Z + M6.1,10L4,18V8H21A2,2 0 0,0 19,6H12L10,4H4A2,2 0 0,0 2,6V18A2,2 0 0,0 4,20H19C19.9,20 20.7,19.4 20.9,18.5L23.2,10H6.1M19,18H6L7.6,12H20.6L19,18Z + M20,18H4V8H20M20,6H12L10,4H4C2.89,4 2,4.89 2,6V18A2,2 0 0,0 4,20H20A2,2 0 0,0 22,18V8C22,6.89 21.1,6 20,6Z + + -