Files
DaSaSo/DaSaSo.ViewModel/Window/MainWindowViewModel.cs
2021-09-25 19:01:47 +02:00

121 lines
4.2 KiB
C#

using DaSaSo.Domain.Enums;
using DaSaSo.Domain.Model;
using DaSaSo.EntityFramework;
using DaSaSo.EntityFramework.Services;
using DaSaSo.ViewModel.Commands;
using DaSaSo.ViewModel.Enums;
using DaSaSo.ViewModel.Interface;
using DaSaSo.ViewModel.State.Navigation;
using Microsoft.Toolkit.Mvvm.Input;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;
namespace DaSaSo.ViewModel
{
public sealed class MainWindowViewModel : BaseViewModel
{
private readonly IViewModelAbstractFactory viewModelFactory;
private readonly IActualProject _actualProject;
private string _clientname = "";
private string _projektname = "";
private string _buildingsitename = "";
public bool CanSelectProject { get => _actualProject.AktuellClient != null; }
public bool CanSelectBuildingSite { get => _actualProject.AktuellProjekt != null; }
public bool CanSelectSewerObjects { get => _actualProject.AktuellBaustelle != null; }
public IMainWindowNavigator _navigator { get; set; }
public ICommand UpdateCurrentViewModelCommand { get; }
public BaseViewModel CurrentViewModel => _navigator.CurrentViewModel;
public string ClientName
{
get => _clientname;
set
{
if(_clientname != value)
{
_clientname = value;
OnPropertyChanged();
}
}
}
public string Projektname
{
get => _projektname;
set
{
if (_projektname != value)
{
_projektname = value;
OnPropertyChanged();
}
}
}
public string Buildingsitename
{
get => _buildingsitename;
set
{
if (_buildingsitename != value)
{
_buildingsitename = value;
OnPropertyChanged();
}
}
}
public MainWindowViewModel(IMainWindowNavigator navigator,IViewModelAbstractFactory viewModelFactory, IActualProject actualProject)
{
this._navigator = navigator;
this.viewModelFactory = viewModelFactory;
_navigator.StateChanged += _navigator_StateChanged;
UpdateCurrentViewModelCommand = new UpdateCurrentViewModelCommand(navigator, viewModelFactory);
UpdateCurrentViewModelCommand.Execute(EMainWindowViewType.Home);
_actualProject = actualProject;
_actualProject.ClientChanged += _actualProject_ClientChanged;
_actualProject.ProjectChanged += _actualProject_ProjectChanged;
_actualProject.BuildingSiteChanged += _actualProject_BuildingSiteChanged;
_actualProject.SewerObjectChanged += _actualProject_SewerObjectChanged;
}
private void _actualProject_SewerObjectChanged(object? sender, EventArgs e)
{
UpdateCurrentViewModelCommand.Execute(EMainWindowViewType.SewerMainMenu);
}
private void _navigator_StateChanged()
{
OnPropertyChanged(nameof(CurrentViewModel));
}
private void _actualProject_BuildingSiteChanged(object? sender, EventArgs e)
{
Buildingsitename = _actualProject.AktuellBaustelle.BuildingSiteNumber;
OnPropertyChanged(nameof(CanSelectSewerObjects));
UpdateCurrentViewModelCommand.Execute(EMainWindowViewType.SewerObjects);
}
private void _actualProject_ProjectChanged(object? sender, EventArgs e)
{
Projektname = _actualProject.AktuellProjekt.Name;
OnPropertyChanged(nameof(CanSelectBuildingSite));
UpdateCurrentViewModelCommand.Execute(EMainWindowViewType.Buildingsites);
}
private void _actualProject_ClientChanged(object? sender, EventArgs e)
{
ClientName = _actualProject.AktuellClient.Firstname;
OnPropertyChanged(nameof(CanSelectProject));
UpdateCurrentViewModelCommand.Execute(EMainWindowViewType.Projects);
}
}
}