diff --git a/src/Snap.Hutao/Snap.Hutao/Message/BackgroundImageTypeChangedMessage.cs b/src/Snap.Hutao/Snap.Hutao/Message/BackgroundImageTypeChangedMessage.cs new file mode 100644 index 00000000..ec85335e --- /dev/null +++ b/src/Snap.Hutao/Snap.Hutao/Message/BackgroundImageTypeChangedMessage.cs @@ -0,0 +1,8 @@ +// Copyright (c) DGP Studio. All rights reserved. +// Licensed under the MIT license. + +namespace Snap.Hutao.Message; + +internal sealed class BackgroundImageTypeChangedMessage +{ +} diff --git a/src/Snap.Hutao/Snap.Hutao/View/MainView.xaml b/src/Snap.Hutao/Snap.Hutao/View/MainView.xaml index b5728fb2..45f98c12 100644 --- a/src/Snap.Hutao/Snap.Hutao/View/MainView.xaml +++ b/src/Snap.Hutao/Snap.Hutao/View/MainView.xaml @@ -18,7 +18,7 @@ @@ -31,7 +31,7 @@ public MainView() { - DataContext = Ioc.Default.GetRequiredService(); + IServiceProvider serviceProvider = Ioc.Default; + + MainViewModel mainViewModel = serviceProvider.GetRequiredService(); + + DataContext = mainViewModel; InitializeComponent(); - IServiceProvider serviceProvider = Ioc.Default; + mainViewModel.Initialize(BackgroundImagePresenter); navigationService = serviceProvider.GetRequiredService(); if (navigationService is INavigationInitialization navigationInitialization) diff --git a/src/Snap.Hutao/Snap.Hutao/ViewModel/Main/IMainViewModelInitialization.cs b/src/Snap.Hutao/Snap.Hutao/ViewModel/Main/IMainViewModelInitialization.cs new file mode 100644 index 00000000..6dcf8b04 --- /dev/null +++ b/src/Snap.Hutao/Snap.Hutao/ViewModel/Main/IMainViewModelInitialization.cs @@ -0,0 +1,11 @@ +// Copyright (c) DGP Studio. All rights reserved. +// Licensed under the MIT license. + +using Microsoft.UI.Xaml.Controls; + +namespace Snap.Hutao.ViewModel.Main; + +internal interface IMainViewModelInitialization +{ + void Initialize(Image backgroundImagePresenter); +} diff --git a/src/Snap.Hutao/Snap.Hutao/ViewModel/MainViewModel.cs b/src/Snap.Hutao/Snap.Hutao/ViewModel/Main/MainViewModel.cs similarity index 79% rename from src/Snap.Hutao/Snap.Hutao/ViewModel/MainViewModel.cs rename to src/Snap.Hutao/Snap.Hutao/ViewModel/Main/MainViewModel.cs index fa333520..4235565d 100644 --- a/src/Snap.Hutao/Snap.Hutao/ViewModel/MainViewModel.cs +++ b/src/Snap.Hutao/Snap.Hutao/ViewModel/Main/MainViewModel.cs @@ -1,23 +1,37 @@ // Copyright (c) DGP Studio. All rights reserved. // Licensed under the MIT license. +using CommunityToolkit.Mvvm.Messaging; using CommunityToolkit.WinUI.Animations; using Microsoft.UI.Xaml.Controls; using Microsoft.UI.Xaml.Media.Animation; using Snap.Hutao.Control.Animation; using Snap.Hutao.Control.Theme; +using Snap.Hutao.Message; using Snap.Hutao.Service.BackgroundImage; +using Snap.Hutao.ViewModel.Main; namespace Snap.Hutao.ViewModel; [ConstructorGenerated] [Injection(InjectAs.Singleton)] -internal sealed partial class MainViewModel : Abstraction.ViewModel +internal sealed partial class MainViewModel : Abstraction.ViewModel, IMainViewModelInitialization, IRecipient { private readonly IBackgroundImageService backgroundImageService; private readonly ITaskContext taskContext; private BackgroundImage? previousBackgroundImage; + private Image backgroundImagePresenter; + + public void Initialize(Image backgroundImagePresenter) + { + this.backgroundImagePresenter = backgroundImagePresenter; + } + + public void Receive(BackgroundImageTypeChangedMessage message) + { + UpdateBackgroundAsync(backgroundImagePresenter).SafeForget(); + } [Command("UpdateBackgroundCommand")] private async Task UpdateBackgroundAsync(Image presenter) diff --git a/src/Snap.Hutao/Snap.Hutao/ViewModel/Setting/SettingViewModel.cs b/src/Snap.Hutao/Snap.Hutao/ViewModel/Setting/SettingViewModel.cs index 5ba8cffd..a34ce387 100644 --- a/src/Snap.Hutao/Snap.Hutao/ViewModel/Setting/SettingViewModel.cs +++ b/src/Snap.Hutao/Snap.Hutao/ViewModel/Setting/SettingViewModel.cs @@ -1,6 +1,7 @@ // Copyright (c) DGP Studio. All rights reserved. // Licensed under the MIT license. +using CommunityToolkit.Mvvm.Messaging; using Microsoft.UI.Xaml.Controls; using Microsoft.Windows.AppLifecycle; using Snap.Hutao.Core; @@ -54,6 +55,7 @@ internal sealed partial class SettingViewModel : Abstraction.ViewModel private readonly IUserService userService; private readonly ITaskContext taskContext; private readonly AppOptions appOptions; + private readonly IMessenger messenger; private NameValue? selectedBackdropType; private NameValue? selectedBackgroundImageType; @@ -100,6 +102,7 @@ internal sealed partial class SettingViewModel : Abstraction.ViewModel if (SetProperty(ref selectedBackgroundImageType, value) && value is not null) { AppOptions.BackgroundImageType = value.Value; + messenger.Send(new Message.BackgroundImageTypeChangedMessage()); } } }