Files
firefox-addin-manager/MVVM/Main.ps1
T
2026-06-10 21:57:51 +02:00

78 lines
2.6 KiB
PowerShell

#Requires -Version 5.1
Set-StrictMode -Version Latest
Add-Type -AssemblyName PresentationFramework
Add-Type -AssemblyName PresentationCore
Add-Type -AssemblyName WindowsBase
Add-Type -AssemblyName Microsoft.Win32
$root = $PSScriptRoot
# ---- Laden in Reihenfolge: Base -> Models -> Services -> ViewModels ----
. "$root\ViewModels\BaseViewModel.ps1" # Add-Type fuer ObservableBase + RelayCommand
. "$root\Models\AddonModel.ps1"
. "$root\Models\PolicyCheckModel.ps1"
. "$root\Services\FirefoxService.ps1"
. "$root\Services\RegistryService.ps1"
. "$root\Services\PolicyService.ps1"
. "$root\ViewModels\DeployViewModel.ps1"
. "$root\ViewModels\DiagnosticViewModel.ps1"
. "$root\ViewModels\MainViewModel.ps1"
# ---- XAML laden ----
[xml]$xaml = Get-Content "$root\Views\MainWindow.xaml"
# x:Class entfernen (nicht benoetigt in PowerShell)
$xaml.Window.RemoveAttribute("x:Class")
$reader = [System.Xml.XmlNodeReader]::new($xaml)
$window = [System.Windows.Markup.XamlReader]::Load($reader)
# ---- ViewModel binden ----
$vm = [MainViewModel]::new()
$window.DataContext = $vm
# ---- Code-Behind fuer einfache Hilfsfunktionen ----
$addonGrid = $window.FindName("AddonGrid")
$window.Add_SelectAll_Click = {
foreach ($a in $vm.Deploy.Addons) { $a.IsSelected = $true }
}
$window.Add_SelectNone_Click = {
foreach ($a in $vm.Deploy.Addons) { $a.IsSelected = $false }
}
# Click-Handler fuer Buttons die keinen Command haben (SelectAll/None)
$window.FindName("AddonGrid") | Out-Null
$window | Add-Member -MemberType ScriptMethod -Name "SelectAll_Click" -Force -Value {
foreach ($a in $vm.Deploy.Addons) { $a.IsSelected = $true }
}
$window | Add-Member -MemberType ScriptMethod -Name "SelectNone_Click" -Force -Value {
foreach ($a in $vm.Deploy.Addons) { $a.IsSelected = $false }
}
# Button-Referenzen fuer SelectAll/None direkt verdrahten
$window.AddHandler(
[System.Windows.Controls.Button]::ClickEvent,
[System.Windows.RoutedEventHandler]{
param($sender, $e)
switch ($sender.Content) {
"Alle auswaehlen" { foreach ($a in $vm.Deploy.Addons) { $a.IsSelected = $true } }
"Keine" { foreach ($a in $vm.Deploy.Addons) { $a.IsSelected = $false } }
}
}
)
# ---- Diagnose beim Tab-Wechsel automatisch ausfuehren ----
$tabControl = $window.Content.Children | Where-Object { $_ -is [System.Windows.Controls.TabControl] }
if ($tabControl) {
$tabControl.Add_SelectionChanged({
if ($tabControl.SelectedIndex -eq 1) {
$vm.Diagnostic.RunCheckCommand.Execute($null)
}
})
}
# ---- Fenster anzeigen ----
$window.ShowDialog() | Out-Null