diff --git a/src/Snap.Hutao/Snap.Hutao/ViewModel/Abstraction/ViewModel.cs b/src/Snap.Hutao/Snap.Hutao/ViewModel/Abstraction/ViewModel.cs index 577c2160..e256022a 100644 --- a/src/Snap.Hutao/Snap.Hutao/ViewModel/Abstraction/ViewModel.cs +++ b/src/Snap.Hutao/Snap.Hutao/ViewModel/Abstraction/ViewModel.cs @@ -46,6 +46,38 @@ internal abstract partial class ViewModel : ObservableObject, IViewModel return disposable; } + protected new bool SetProperty([NotNullIfNotNull(nameof(newValue))] ref T field, T newValue, [CallerMemberName] string? propertyName = null) + { + return !IsViewDisposed && base.SetProperty(ref field, newValue, propertyName); + } + + protected new bool SetProperty([NotNullIfNotNull(nameof(newValue))] ref T field, T newValue, IEqualityComparer comparer, [CallerMemberName] string? propertyName = null) + { + return !IsViewDisposed && base.SetProperty(ref field, newValue, comparer, propertyName); + } + + protected new bool SetProperty(T oldValue, T newValue, Action callback, [CallerMemberName] string? propertyName = null) + { + return !IsViewDisposed && base.SetProperty(oldValue, newValue, callback, propertyName); + } + + protected new bool SetProperty(T oldValue, T newValue, IEqualityComparer comparer, Action callback, [CallerMemberName] string? propertyName = null) + { + return !IsViewDisposed && base.SetProperty(oldValue, newValue, comparer, callback, propertyName); + } + + protected new bool SetProperty(T oldValue, T newValue, TModel model, Action callback, [CallerMemberName] string? propertyName = null) + where TModel : class + { + return !IsViewDisposed && base.SetProperty(oldValue, newValue, model, callback, propertyName); + } + + protected new bool SetProperty(T oldValue, T newValue, IEqualityComparer comparer, TModel model, Action callback, [CallerMemberName] string? propertyName = null) + where TModel : class + { + return !IsViewDisposed && base.SetProperty(oldValue, newValue, comparer, model, callback, propertyName); + } + protected bool SetProperty(ref T storage, T value, Action changedCallback, [CallerMemberName] string? propertyName = null) { if (SetProperty(ref storage, value, propertyName)) diff --git a/src/Snap.Hutao/Snap.Hutao/ViewModel/Setting/SettingViewModel.cs b/src/Snap.Hutao/Snap.Hutao/ViewModel/Setting/SettingViewModel.cs index 87213ef9..d2d95039 100644 --- a/src/Snap.Hutao/Snap.Hutao/ViewModel/Setting/SettingViewModel.cs +++ b/src/Snap.Hutao/Snap.Hutao/ViewModel/Setting/SettingViewModel.cs @@ -121,6 +121,11 @@ internal sealed partial class SettingViewModel : Abstraction.ViewModel get => LocalSetting.Get(SettingKeys.IsAllocConsoleDebugModeEnabled, false); set { + if (IsViewDisposed) + { + return; + } + ConfirmSetIsAllocConsoleDebugModeEnabledAsync(value).SafeForget(); async ValueTask ConfirmSetIsAllocConsoleDebugModeEnabledAsync(bool value) @@ -147,6 +152,11 @@ internal sealed partial class SettingViewModel : Abstraction.ViewModel get => launchOptions.IsAdvancedLaunchOptionsEnabled; set { + if (IsViewDisposed) + { + return; + } + ConfirmSetIsAdvancedLaunchOptionsEnabledAsync(value).SafeForget(); async ValueTask ConfirmSetIsAdvancedLaunchOptionsEnabledAsync(bool value) diff --git a/src/Snap.Hutao/Snap.Hutao/ViewModel/TestViewModel.cs b/src/Snap.Hutao/Snap.Hutao/ViewModel/TestViewModel.cs index de53b476..ba90670c 100644 --- a/src/Snap.Hutao/Snap.Hutao/ViewModel/TestViewModel.cs +++ b/src/Snap.Hutao/Snap.Hutao/ViewModel/TestViewModel.cs @@ -25,32 +25,60 @@ internal sealed partial class TestViewModel : Abstraction.ViewModel public UploadAnnouncement Announcement { get => announcement; set => SetProperty(ref announcement, value); } - [SuppressMessage("", "CA1822")] public bool SuppressMetadataInitialization { get => LocalSetting.Get(SettingKeys.SuppressMetadataInitialization, false); - set => LocalSetting.Set(SettingKeys.SuppressMetadataInitialization, value); + set + { + if (IsViewDisposed) + { + return; + } + + LocalSetting.Set(SettingKeys.SuppressMetadataInitialization, value); + } } - [SuppressMessage("", "CA1822")] public bool OverrideElevationRequirement { get => LocalSetting.Get(SettingKeys.OverrideElevationRequirement, false); - set => LocalSetting.Set(SettingKeys.OverrideElevationRequirement, value); + set + { + if (IsViewDisposed) + { + return; + } + + LocalSetting.Set(SettingKeys.OverrideElevationRequirement, value); + } } - [SuppressMessage("", "CA1822")] public bool OverrideUpdateVersionComparison { get => LocalSetting.Get(SettingKeys.OverrideUpdateVersionComparison, false); - set => LocalSetting.Set(SettingKeys.OverrideUpdateVersionComparison, value); + set + { + if (IsViewDisposed) + { + return; + } + + LocalSetting.Set(SettingKeys.OverrideUpdateVersionComparison, value); + } } - [SuppressMessage("", "CA1822")] public bool OverridePackageConvertDirectoryPermissionsRequirement { get => LocalSetting.Get(SettingKeys.OverridePackageConvertDirectoryPermissionsRequirement, false); - set => LocalSetting.Set(SettingKeys.OverridePackageConvertDirectoryPermissionsRequirement, value); + set + { + if (IsViewDisposed) + { + return; + } + + LocalSetting.Set(SettingKeys.OverridePackageConvertDirectoryPermissionsRequirement, value); + } } [Command("ResetGuideStateCommand")]