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); } } }