function Reset-WPFCheckBoxes { <# .SYNOPSIS Set winutil checkboxs to match $sync.selected values. Should only need to be run if $sync.selected updated outside of UI (i.e. presets or import) .PARAMETER doToggles Whether or not to set UI toggles. WARNING: they will trigger if altered .PARAMETER checkboxfilterpattern The Pattern to use when filtering through CheckBoxes, defaults to "**" Used to make reset blazingly fast. #> param ( [Parameter(position=0)] [bool]$doToggles = $false, [Parameter(position=1)] [string]$checkboxfilterpattern = "**" ) $CheckBoxesToCheck = $sync.selectedApps + $sync.selectedTweaks + $sync.selectedFeatures $CheckBoxes = ($sync.GetEnumerator()).where{ $_.Value -is [System.Windows.Controls.CheckBox] -and $_.Name -notlike "WPFToggle*" -and $_.Name -like "$checkboxfilterpattern"} Write-Debug "Getting checkboxes to set, number of checkboxes: $($CheckBoxes.Count)" if ($CheckBoxesToCheck -ne "") { $debugMsg = "CheckBoxes to Check are: " $CheckBoxesToCheck | ForEach-Object { $debugMsg += "$_, " } $debugMsg = $debugMsg -replace (',\s*$', '') Write-Debug "$debugMsg" } foreach ($CheckBox in $CheckBoxes) { $checkboxName = $CheckBox.Key if (-not $CheckBoxesToCheck) { $sync.$checkBoxName.IsChecked = $false continue } # Check if the checkbox name exists in the flattened JSON hashtable if ($CheckBoxesToCheck -contains $checkboxName) { # If it exists, set IsChecked to true $sync.$checkboxName.IsChecked = $true Write-Debug "$checkboxName is checked" } else { # If it doesn't exist, set IsChecked to false $sync.$checkboxName.IsChecked = $false Write-Debug "$checkboxName is not checked" } } # Update Installs tab UI values $count = $sync.SelectedApps.Count $sync.WPFselectedAppsButton.Content = "Selected Apps: $count" # On every change, remove all entries inside the Popup Menu. This is done, so we can keep the alphabetical order even if elements are selected in a random way $sync.selectedAppsstackPanel.Children.Clear() $sync.selectedApps | Foreach-Object { Add-SelectedAppsMenuItem -name $($sync.configs.applicationsHashtable.$_.Content) -key $_ } if($doToggles) { # Restore toggle switch states from imported config. # Only act on toggles that are explicitly listed in the import — toggles absent # from the export file were not part of the saved config and should keep whatever # state the live system already has (set during UI initialisation via Get-WinUtilToggleStatus). $importedToggles = $sync.selectedToggles $allToggles = $sync.GetEnumerator() | Where-Object { $_.Key -like "WPFToggle*" -and $_.Value -is [System.Windows.Controls.CheckBox] } foreach ($toggle in $allToggles) { if ($importedToggles -contains $toggle.Key) { $sync[$toggle.Key].IsChecked = $true Write-Debug "Restoring toggle: $($toggle.Key) = checked" } # Toggles not present in the import are intentionally left untouched; # their current UI state already reflects the real system state. } } }