Files
GazpromApp/Views/EditPointDialog.axaml.cs
T
2025-07-17 10:30:47 +03:00

119 lines
4.4 KiB
C#

using System;
using Avalonia.Controls;
using CommunityToolkit.Mvvm.Messaging;
using GazpromApp.Messages;
using GazpromApp.ViewModels;
namespace GazpromApp.Views;
public partial class EditPointDialog : Window
{
public EditPointDialog()
{
InitializeComponent();
if (Design.IsDesignMode)
return;
// view image
WeakReferenceMessenger.Default.Register<EditPointDialog, ViewImageMessage>(this, static (w, m) =>
{
var dialog = new ImageView
{
DataContext = m.Image
};
m.Reply(dialog.ShowDialog<ImageViewModel?>(w));
});
// error
WeakReferenceMessenger.Default.Register<EditPointDialog, ErrorMessage>(this, static (w, m) =>
{
var dialog = new ErrorView
{
DataContext = m.Error
};
m.Reply(dialog.ShowDialog<ErrorViewModel?>(w));
});
// new equipment
WeakReferenceMessenger.Default.Register<EditPointDialog, NewEquipmentMessage>(this, (w, m) =>
{
WeakReferenceMessenger.Default.Unregister<ErrorMessage>(this);
var dialog = new NewEquipmentDialog
{
DataContext = new NewEquipmentDialogViewModel()
};
m.Reply(dialog.ShowDialog<EquipmentViewModel?>(w));
});
// edit equipment
WeakReferenceMessenger.Default.Register<EditPointDialog, EditEquipmentMessage>(this, (w, m) =>
{
WeakReferenceMessenger.Default.Unregister<ViewImageMessage>(this);
WeakReferenceMessenger.Default.Unregister<ErrorMessage>(this);
var dialog = new EditEquipmentDialog
{
DataContext = new EditEquipmentDialogViewModel(m.Equipment)
};
m.Reply(dialog.ShowDialog<EquipmentViewModel?>(w));
});
// re registering error when new equipment done
WeakReferenceMessenger.Default.Register<EditPointDialog, NewEquipmentDone>(this, (_, _) =>
{
if (!WeakReferenceMessenger.Default.IsRegistered<ErrorMessage>(this))
WeakReferenceMessenger.Default.Register<EditPointDialog, ErrorMessage>(this, static (w, m) =>
{
var dialog = new ErrorView
{
DataContext = m.Error
};
m.Reply(dialog.ShowDialog<ErrorViewModel?>(w));
});
});
// re registering view image and error view
WeakReferenceMessenger.Default.Register<EditPointDialog, EditEquipmentDone>(this, (_, _) =>
{
if (!WeakReferenceMessenger.Default.IsRegistered<ViewImageMessage>(this))
WeakReferenceMessenger.Default.Register<EditPointDialog, ViewImageMessage>(this, static (w, m) =>
{
var dialog = new ImageView
{
DataContext = m.Image
};
m.Reply(dialog.ShowDialog<ImageViewModel?>(w));
});
if (!WeakReferenceMessenger.Default.IsRegistered<ErrorMessage>(this))
WeakReferenceMessenger.Default.Register<EditPointDialog, ErrorMessage>(this, static (w, m) =>
{
var dialog = new ErrorView
{
DataContext = m.Error
};
m.Reply(dialog.ShowDialog<ErrorViewModel?>(w));
});
});
// complete editing point
WeakReferenceMessenger.Default.Register<EditPointDialog, EditPointDone>(this, static (w, m) =>
{
w.Close(m.Point);
});
}
private void Window_OnClosing(object? sender, WindowClosingEventArgs e)
{
if (DataContext is EditPointDialogViewModel { IsClosed: false } vm)
vm.CancelEditCommand.Execute(this);
}
private void Window_OnClosed(object? sender, EventArgs e)
{
WeakReferenceMessenger.Default.Unregister<ViewImageMessage>(this);
WeakReferenceMessenger.Default.Unregister<ErrorMessage>(this);
WeakReferenceMessenger.Default.Unregister<NewEquipmentMessage>(this);
WeakReferenceMessenger.Default.Unregister<EditEquipmentMessage>(this);
WeakReferenceMessenger.Default.Unregister<EditPointDone>(this);
}
}