111 lines
2.1 KiB
C#
111 lines
2.1 KiB
C#
using System;
|
|
using System.Collections.ObjectModel;
|
|
using Avalonia.Controls;
|
|
using CommunityToolkit.Mvvm.Input;
|
|
|
|
namespace PortfolioManager.ViewModels
|
|
{
|
|
public delegate void InstantiateWorkspace(SaveParameters saveParameters);
|
|
|
|
public abstract class WorkspaceViewModel : ViewModelBase
|
|
{
|
|
// Relay Command
|
|
private RelayCommand closeCommand;
|
|
|
|
// Events
|
|
public event EventHandler RequestClose;
|
|
|
|
private InstantiateWorkspace workspaceInstantiator;
|
|
private bool canClose = true;
|
|
private bool isClosed = false;
|
|
private String title = "WorkspaceViewModel";
|
|
|
|
public WorkspaceViewModel Referer { get; set; }
|
|
|
|
protected WorkspaceViewModel()
|
|
{
|
|
}
|
|
|
|
public InstantiateWorkspace WorkspaceInstantiator
|
|
{
|
|
get
|
|
{
|
|
return workspaceInstantiator;
|
|
}
|
|
set
|
|
{
|
|
workspaceInstantiator = value;
|
|
}
|
|
}
|
|
|
|
public IRelayCommand CloseCommand
|
|
{
|
|
get
|
|
{
|
|
if (null == closeCommand)
|
|
{
|
|
Action closeAction = delegate ()
|
|
{
|
|
this.OnRequestClose();
|
|
};
|
|
closeCommand = new RelayCommand(delegate () { this.OnRequestClose(); });
|
|
}
|
|
return closeCommand;
|
|
}
|
|
}
|
|
|
|
public bool IsClosed
|
|
{
|
|
get { return isClosed; }
|
|
set
|
|
{
|
|
if (isClosed != value)
|
|
{
|
|
isClosed = value;
|
|
base.OnPropertyChanged("IsClosed");
|
|
}
|
|
}
|
|
}
|
|
|
|
public bool CanClose
|
|
{
|
|
get { return canClose; }
|
|
set
|
|
{
|
|
if (canClose != value)
|
|
{
|
|
canClose = value;
|
|
base.OnPropertyChanged("CanClose");
|
|
}
|
|
}
|
|
}
|
|
|
|
public virtual String Title
|
|
{
|
|
get
|
|
{
|
|
return title;
|
|
}
|
|
set
|
|
{
|
|
title = value;
|
|
base.OnPropertyChanged("Title");
|
|
}
|
|
}
|
|
|
|
public virtual String Header
|
|
{
|
|
get
|
|
{
|
|
return title;
|
|
}
|
|
}
|
|
|
|
private void OnRequestClose()
|
|
{
|
|
EventHandler handler = this.RequestClose;
|
|
if (null != handler) handler(this, EventArgs.Empty);
|
|
}
|
|
}
|
|
}
|