using System; using System.Collections.Generic; using System.Diagnostics; using System.Threading.Tasks; using Avalonia.Controls; using Avalonia.Interactivity; using Avalonia.Platform.Storage; using CommunityToolkit.Mvvm.Messaging; using GazpromApp.Messages; using GazpromApp.ViewModels; namespace GazpromApp.Views; public partial class MainWindow : Window { private bool _canClose = false; public MainWindow() { InitializeComponent(); if (Design.IsDesignMode) return; WeakReferenceMessenger.Default.Register(this, HandleImageSelection); WeakReferenceMessenger.Default.Register(this, HandleImageViewer); WeakReferenceMessenger.Default.Register(this, HandleErrorViewer); WeakReferenceMessenger.Default.Register(this, HandleSave); } private static void HandleImageSelection(MainWindow sender, RequestImageMessage msg) { var files = sender.StorageProvider.OpenFilePickerAsync(new FilePickerOpenOptions { AllowMultiple = true, Title = "Выберите одну или несколько картинок", FileTypeFilter = [FilePickerFileTypes.ImageAll] }); msg.Reply(files); } private static void HandleImageViewer(MainWindow sender, ViewImageMessage msg) { var dialog = new ImageView { DataContext = msg.Image }; msg.Reply(dialog.ShowDialog(sender)); } private static void HandleErrorViewer(MainWindow sender, ErrorMessage msg) { var dialog = new ErrorView { DataContext = msg.Error }; msg.Reply(dialog.ShowDialog(sender)); } private void TreeView_OnSelectionChanged(object? sender, SelectionChangedEventArgs e) { if (e.AddedItems.Count > 0) WeakReferenceMessenger.Default.Send(new SelectionChangedMessage((ViewModelBase)e.AddedItems[0]!)); } private void HandleSave(object sender, SaveChangesResult msg) { if (msg.Cancel) return; if (msg.Save) ((MainWindowViewModel)DataContext!).SyncDbCommand.Execute(null); ForceClose(); } private void ForceClose() { _canClose = true; Close(); } private void Window_OnClosing(object? sender, WindowClosingEventArgs e) { if (_canClose) return; if (!((MainWindowViewModel)DataContext!).CanSync) return; var dialog = new SaveChangesView { DataContext = new SaveChangesViewModel() }; dialog.ShowDialog(this); e.Cancel = true; } }