Add MVVM/Main.ps1
This commit is contained in:
@@ -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
|
||||
Reference in New Issue
Block a user