using System.ComponentModel; using System.Windows; using System.Windows.Threading; namespace Zcbot.WindowsNode; public partial class MainWindow : Window { private readonly DispatcherTimer jobRefreshTimer; internal MainWindow(MainWindowViewModel viewModel) { InitializeComponent(); ViewModel = viewModel; DataContext = viewModel; ViewModel.PropertyChanged += ViewModel_OnPropertyChanged; jobRefreshTimer = new DispatcherTimer(DispatcherPriority.Background, Dispatcher) { Interval = TimeSpan.FromSeconds(1), }; jobRefreshTimer.Tick += (_, _) => { if (IsVisible && ViewModel.IsJobsPage) { ViewModel.JobPage.Refresh(); } }; jobRefreshTimer.Start(); } internal MainWindowViewModel ViewModel { get; } internal bool AllowClose { get; set; } protected override void OnClosing(CancelEventArgs eventArgs) { if (!AllowClose) { eventArgs.Cancel = true; Hide(); } base.OnClosing(eventArgs); } protected override void OnClosed(EventArgs eventArgs) { jobRefreshTimer.Stop(); ViewModel.PropertyChanged -= ViewModel_OnPropertyChanged; base.OnClosed(eventArgs); } internal void ShowAndActivate() { if (!IsVisible) Show(); if (WindowState == WindowState.Minimized) WindowState = WindowState.Normal; Activate(); } private void EnrollmentCodeBox_OnPasswordChanged( object sender, System.Windows.RoutedEventArgs eventArgs) { if (!string.Equals( ViewModel.EnrollmentCode, EnrollmentCodeBox.Password, StringComparison.Ordinal)) { ViewModel.EnrollmentCode = EnrollmentCodeBox.Password; } } private void ViewModel_OnPropertyChanged(object? sender, PropertyChangedEventArgs eventArgs) { if (eventArgs.PropertyName == nameof(MainWindowViewModel.EnrollmentCode) && !string.Equals( EnrollmentCodeBox.Password, ViewModel.EnrollmentCode, StringComparison.Ordinal)) { EnrollmentCodeBox.Password = ViewModel.EnrollmentCode; } } }