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);