From 897a71aa1304cfcba9011fcdd79f56f3efa5eb52 Mon Sep 17 00:00:00 2001 From: Dong Bin Date: Fri, 24 Apr 2026 18:17:40 +0800 Subject: [PATCH] feat: implement singleton pattern for PaletteDemoViewModel and add initialization check --- demo/Semi.Avalonia.Demo/Pages/PaletteDemo.axaml.cs | 10 ++++++---- .../ViewModels/PaletteDemoViewModel.cs | 5 ++++- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/demo/Semi.Avalonia.Demo/Pages/PaletteDemo.axaml.cs b/demo/Semi.Avalonia.Demo/Pages/PaletteDemo.axaml.cs index 33b7283..f5476e1 100644 --- a/demo/Semi.Avalonia.Demo/Pages/PaletteDemo.axaml.cs +++ b/demo/Semi.Avalonia.Demo/Pages/PaletteDemo.axaml.cs @@ -12,14 +12,16 @@ public partial class PaletteDemo : UserControl public PaletteDemo() { InitializeComponent(); - this.DataContext = new PaletteDemoViewModel(); + this.DataContext = PaletteDemoViewModel.Instance.Value; } protected override async void OnApplyTemplate(TemplateAppliedEventArgs e) { base.OnApplyTemplate(e); - PaletteDemoViewModel? vm = this.DataContext as PaletteDemoViewModel; - await Dispatcher.UIThread.InvokeAsync(() => { vm?.InitializeResources(); }); + if (this.DataContext is PaletteDemoViewModel vm && !vm.IsInitialized) + { + await Dispatcher.UIThread.InvokeAsync(() => { vm?.InitializeResources(); }); + } } public async Task Copy(object? o) @@ -31,4 +33,4 @@ public partial class PaletteDemo : UserControl await c.SetTextAsync(o.ToString()); } } -} \ No newline at end of file +} diff --git a/demo/Semi.Avalonia.Demo/ViewModels/PaletteDemoViewModel.cs b/demo/Semi.Avalonia.Demo/ViewModels/PaletteDemoViewModel.cs index 363c608..e3aeab8 100644 --- a/demo/Semi.Avalonia.Demo/ViewModels/PaletteDemoViewModel.cs +++ b/demo/Semi.Avalonia.Demo/ViewModels/PaletteDemoViewModel.cs @@ -14,6 +14,8 @@ namespace Semi.Avalonia.Demo.ViewModels; public partial class PaletteDemoViewModel : ObservableObject { + public static Lazy Instance { get; } = new(() => new PaletteDemoViewModel()); + public bool IsInitialized { get; private set; } private readonly string[] _predefinedColorNames = [ "Red", "Pink", "Purple", "Violet", "Indigo", @@ -44,6 +46,7 @@ public partial class PaletteDemoViewModel : ObservableObject InitializePalette(); InitializeFunctionalColors(); InitializeShadows(); + IsInitialized = true; } private void InitializePalette() @@ -289,4 +292,4 @@ public partial class ShadowGroupViewModel : ObservableObject } } } -} \ No newline at end of file +}