diff --git a/src/Files.App/ViewModels/Properties/CustomizationViewModel.cs b/src/Files.App/ViewModels/Properties/CustomizationViewModel.cs index 1b3138051609..7b65d86a01b1 100644 --- a/src/Files.App/ViewModels/Properties/CustomizationViewModel.cs +++ b/src/Files.App/ViewModels/Properties/CustomizationViewModel.cs @@ -1,8 +1,5 @@ -using CommunityToolkit.WinUI; -using Files.App.Utils.Shell; +using Microsoft.UI.Windowing; using System.IO; -using Windows.Storage.Pickers; -using Microsoft.UI.Windowing; using System.Windows.Input; namespace Files.App.ViewModels.Properties @@ -24,13 +21,29 @@ private static string DefaultIconDllFilePath public readonly bool IsShortcut; - public ObservableCollection DllIcons { get; } + public ObservableCollection DllIcons { get; } = []; private string _IconResourceItemPath; public string IconResourceItemPath { get => _IconResourceItemPath; - set => SetProperty(ref _IconResourceItemPath, value); + set + { + if (SetProperty(ref _IconResourceItemPath, value)) + { + DllIcons.Clear(); + + if (Path.Exists(_IconResourceItemPath)) + { + var icons = Win32Helper.ExtractIconsFromDLL(_IconResourceItemPath); + if (icons?.Count is null or 0) + return; + + foreach (var item in icons) + DllIcons.Add(item); + } + } + } } private IconFileInfo? _SelectedDllIcon; @@ -64,10 +77,6 @@ public CustomizationViewModel(IShellPage appInstance, BaseProperties basePropert IsShortcut = item.IsShortcut; _selectedItemPath = item.ItemPath; - DllIcons = []; - - // Get default - LoadIconsForPath(IconResourceItemPath); RestoreDefaultIconCommand = new RelayCommand(ExecuteRestoreDefaultIconCommand); OpenFilePickerCommand = new RelayCommand(ExecuteOpenFilePickerCommand); @@ -93,7 +102,7 @@ private void ExecuteOpenFilePickerCommand() var result = CommonDialogService.Open_FileOpenDialog(hWnd, false, extensions, Environment.SpecialFolder.MyComputer, out var filePath); if (result) - LoadIconsForPath(filePath); + IconResourceItemPath = filePath; } public async Task UpdateIcon() @@ -126,18 +135,5 @@ await MainWindow.Instance.DispatcherQueue.EnqueueOrInvokeAsync(() => return true; } - - private void LoadIconsForPath(string path) - { - IconResourceItemPath = path; - DllIcons.Clear(); - - var icons = Win32Helper.ExtractIconsFromDLL(path); - if (icons?.Count is null or 0) - return; - - foreach(var item in icons) - DllIcons.Add(item); - } } } diff --git a/src/Files.App/Views/Properties/CustomizationPage.xaml b/src/Files.App/Views/Properties/CustomizationPage.xaml index fe789cd90203..deb66d0d20d6 100644 --- a/src/Files.App/Views/Properties/CustomizationPage.xaml +++ b/src/Files.App/Views/Properties/CustomizationPage.xaml @@ -81,10 +81,7 @@ - +