Files
GazpromApp/Views/MainWindow.axaml.cs

91 lines
2.8 KiB
C#

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<MainWindow, RequestImageMessage>(this, HandleImageSelection);
WeakReferenceMessenger.Default.Register<MainWindow, ViewImageMessage>(this, HandleImageViewer);
WeakReferenceMessenger.Default.Register<MainWindow, ErrorMessage>(this, HandleErrorViewer);
WeakReferenceMessenger.Default.Register<MainWindow, SaveChangesResult>(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<ImageViewModel?>(sender));
}
private static void HandleErrorViewer(MainWindow sender, ErrorMessage msg)
{
var dialog = new ErrorView
{
DataContext = msg.Error
};
msg.Reply(dialog.ShowDialog<ErrorViewModel?>(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<SaveChangesViewModel?>(this);
e.Cancel = true;
}
}