From 2c471aa3f6a4e98feb73376b79343a7a5211f3dd Mon Sep 17 00:00:00 2001 From: rabbitism Date: Wed, 17 Apr 2024 20:10:32 +0800 Subject: [PATCH] feat: add mvvm sample. --- demo/Ursa.Demo/Pages/TreeComboBoxDemo.axaml | 54 ++++++++++------ .../ViewModels/TreeComboBoxDemoViewModel.cs | 61 ++++++++++++++++++- src/Ursa/Controls/ComboBox/TreeComboBox.cs | 3 +- 3 files changed, 99 insertions(+), 19 deletions(-) diff --git a/demo/Ursa.Demo/Pages/TreeComboBoxDemo.axaml b/demo/Ursa.Demo/Pages/TreeComboBoxDemo.axaml index 171cfe8..82d1737 100644 --- a/demo/Ursa.Demo/Pages/TreeComboBoxDemo.axaml +++ b/demo/Ursa.Demo/Pages/TreeComboBoxDemo.axaml @@ -1,27 +1,47 @@ - + - + - - - + + + - - + + - - - + + + + + + + + + + + + + + + diff --git a/demo/Ursa.Demo/ViewModels/TreeComboBoxDemoViewModel.cs b/demo/Ursa.Demo/ViewModels/TreeComboBoxDemoViewModel.cs index 33a9252..0261bd0 100644 --- a/demo/Ursa.Demo/ViewModels/TreeComboBoxDemoViewModel.cs +++ b/demo/Ursa.Demo/ViewModels/TreeComboBoxDemoViewModel.cs @@ -1,8 +1,67 @@ +using System.Collections.Generic; using CommunityToolkit.Mvvm.ComponentModel; namespace Ursa.Demo.ViewModels; public class TreeComboBoxDemoViewModel: ObservableObject { - + public List Items { get; set; } + + public TreeComboBoxDemoViewModel() + { + Items = new List() + { + new TreeComboBoxItemViewModel() + { + ItemName = "Item 1", + Children = new List() + { + new TreeComboBoxItemViewModel() + { + ItemName = "Item 1-1", + Children = new List() + { + new TreeComboBoxItemViewModel() + { + ItemName = "Item 1-1-1" + }, + new TreeComboBoxItemViewModel() + { + ItemName = "Item 1-1-2" + } + } + }, + new TreeComboBoxItemViewModel() + { + ItemName = "Item 1-2" + } + } + }, + new TreeComboBoxItemViewModel() + { + ItemName = "Item 2", + Children = new List() + { + new TreeComboBoxItemViewModel() + { + ItemName = "Item 2-1" + }, + new TreeComboBoxItemViewModel() + { + ItemName = "Item 2-2" + } + } + }, + new TreeComboBoxItemViewModel() + { + ItemName = "Item 3" + }, + }; + } +} + +public partial class TreeComboBoxItemViewModel : ObservableObject +{ + [ObservableProperty] private string? _itemName; + public List Children { get; set; } = new (); } \ No newline at end of file diff --git a/src/Ursa/Controls/ComboBox/TreeComboBox.cs b/src/Ursa/Controls/ComboBox/TreeComboBox.cs index 83999fd..f39f262 100644 --- a/src/Ursa/Controls/ComboBox/TreeComboBox.cs +++ b/src/Ursa/Controls/ComboBox/TreeComboBox.cs @@ -6,8 +6,8 @@ using Avalonia.Controls.Shapes; using Avalonia.Controls.Templates; using Avalonia.Input; using Avalonia.Layout; -using Avalonia.LogicalTree; using Avalonia.Media; +using Avalonia.Metadata; using Avalonia.VisualTree; using Irihi.Avalonia.Shared.Common; using Size = Avalonia.Size; @@ -71,6 +71,7 @@ public class TreeComboBox: ItemsControl public static readonly StyledProperty SelectedItemTemplateProperty = AvaloniaProperty.Register(nameof(SelectedItemTemplate)); + [InheritDataTypeFromItems(nameof(ItemsSource))] public IDataTemplate? SelectedItemTemplate { get => GetValue(SelectedItemTemplateProperty);