diff --git a/MVVM/Main.ps1 b/MVVM/Main.ps1 new file mode 100644 index 0000000..aae76a7 --- /dev/null +++ b/MVVM/Main.ps1 @@ -0,0 +1,77 @@ +#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