1
- using CommunityToolkit . WinUI ;
2
- using Files . App . Utils . Shell ;
1
+ using Microsoft . UI . Windowing ;
3
2
using System . IO ;
4
- using Windows . Storage . Pickers ;
5
- using Microsoft . UI . Windowing ;
6
3
using System . Windows . Input ;
7
4
8
5
namespace Files . App . ViewModels . Properties
@@ -24,13 +21,29 @@ private static string DefaultIconDllFilePath
24
21
25
22
public readonly bool IsShortcut ;
26
23
27
- public ObservableCollection < IconFileInfo > DllIcons { get ; }
24
+ public ObservableCollection < IconFileInfo > DllIcons { get ; } = [ ] ;
28
25
29
26
private string _IconResourceItemPath ;
30
27
public string IconResourceItemPath
31
28
{
32
29
get => _IconResourceItemPath ;
33
- set => SetProperty ( ref _IconResourceItemPath , value ) ;
30
+ set
31
+ {
32
+ if ( SetProperty ( ref _IconResourceItemPath , value ) )
33
+ {
34
+ DllIcons . Clear ( ) ;
35
+
36
+ if ( Path . Exists ( _IconResourceItemPath ) )
37
+ {
38
+ var icons = Win32Helper . ExtractIconsFromDLL ( _IconResourceItemPath ) ;
39
+ if ( icons ? . Count is null or 0 )
40
+ return ;
41
+
42
+ foreach ( var item in icons )
43
+ DllIcons . Add ( item ) ;
44
+ }
45
+ }
46
+ }
34
47
}
35
48
36
49
private IconFileInfo ? _SelectedDllIcon ;
@@ -64,10 +77,6 @@ public CustomizationViewModel(IShellPage appInstance, BaseProperties basePropert
64
77
IsShortcut = item . IsShortcut ;
65
78
_selectedItemPath = item . ItemPath ;
66
79
67
- DllIcons = [ ] ;
68
-
69
- // Get default
70
- LoadIconsForPath ( IconResourceItemPath ) ;
71
80
72
81
RestoreDefaultIconCommand = new RelayCommand ( ExecuteRestoreDefaultIconCommand ) ;
73
82
OpenFilePickerCommand = new RelayCommand ( ExecuteOpenFilePickerCommand ) ;
@@ -93,7 +102,7 @@ private void ExecuteOpenFilePickerCommand()
93
102
94
103
var result = CommonDialogService . Open_FileOpenDialog ( hWnd , false , extensions , Environment . SpecialFolder . MyComputer , out var filePath ) ;
95
104
if ( result )
96
- LoadIconsForPath ( filePath ) ;
105
+ IconResourceItemPath = filePath ;
97
106
}
98
107
99
108
public async Task < bool > UpdateIcon ( )
@@ -126,18 +135,5 @@ await MainWindow.Instance.DispatcherQueue.EnqueueOrInvokeAsync(() =>
126
135
127
136
return true ;
128
137
}
129
-
130
- private void LoadIconsForPath ( string path )
131
- {
132
- IconResourceItemPath = path ;
133
- DllIcons . Clear ( ) ;
134
-
135
- var icons = Win32Helper . ExtractIconsFromDLL ( path ) ;
136
- if ( icons ? . Count is null or 0 )
137
- return ;
138
-
139
- foreach ( var item in icons )
140
- DllIcons . Add ( item ) ;
141
- }
142
138
}
143
139
}
0 commit comments