Refactor duplicated code: Add SetProperty helper and generic dialog base classes #3224
+152
−433
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Identified and eliminated ~280 lines of duplicated code across ViewModels, primarily repetitive property setter boilerplate (1073+ instances) and duplicate command initialization patterns.
Changes
Infrastructure
PropertyChangedBase.SetProperty<T>()- Generic helper usingEqualityComparer<T>andCallerMemberNameDialogViewModelBase<T>- Generic base for OK/Cancel dialog ViewModelsConnectDialogViewModelBase<T>- Generic base for Connect/Cancel dialog ViewModelsRefactored ViewModels (15 files)
Dialog ViewModels: DropdownViewModel, IPAddressViewModel, IPAddressAndSubnetmaskViewModel, HostsFileEditorEntryViewModel, OKCancelInfoMessageViewModel, CredentialsPasswordViewModel, CredentialsSetPasswordViewModel, CredentialsChangePasswordViewModel, CredentialsPasswordProfileFileViewModel, PortProfilesViewModel, SNMPOIDProfilesViewModel
Connect ViewModels: RemoteDesktopConnectViewModel, PuTTYConnectViewModel
Property simplification: PingMonitorHostViewModel (13 properties), multiple others (70+ total)
Example
Before (6 lines):
After (1 line):
Future Opportunities
Remaining ViewModels with similar patterns: AWSSessionManagerConnectViewModel, TigerVNCConnectViewModel, WiFiConnectViewModel, PowerShellConnectViewModel, WebConsoleConnectViewModel
Large files with many property setters: SettingsInfo.cs (271), ProfileViewModel.cs (160), GroupViewModel.cs (96)
Original prompt
✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.