SinglePage erweitert

This commit is contained in:
HuskyTeufel
2021-09-17 13:32:07 +02:00
parent 0f11ce7f0f
commit f2ea55ea34
26 changed files with 268 additions and 70 deletions

View File

@@ -2,8 +2,8 @@
{
public delegate TViewModel CreateViewModel<TViewModel>() where TViewModel : BaseViewModel;
public class BaseViewModel : ObservableObject
{
{
public virtual void Dispose() { }
}
}

View File

@@ -19,9 +19,9 @@ namespace DaSaSo.ViewModel.Commands
public override async Task ExecuteAsync(object? parameter)
{
if(parameter is EViewType)
if(parameter is EMainWindowViewType)
{
EViewType viewType = (EViewType)parameter;
EMainWindowViewType viewType = (EMainWindowViewType)parameter;
_navigator.CurrentViewModel = _viewModelFactory.CreateViewModel(viewType);
}
}

View File

@@ -6,7 +6,7 @@ using System.Threading.Tasks;
namespace DaSaSo.ViewModel.Enums
{
public enum EViewType
public enum EMainWindowViewType
{
Home,
Clients,

View File

@@ -11,7 +11,7 @@ using System.Threading.Tasks;
namespace DaSaSo.ViewModel.Factories
{
public class ViewModelAbstractFactory : IViewModelAbstractFactory
public class MainWindowViewModelFactory : IViewModelAbstractFactory
{
private CreateViewModel<HomeViewModel> _createHomeViewModel;
private CreateViewModel<ClientListViewModel> _createClientListViewModel;
@@ -20,7 +20,7 @@ namespace DaSaSo.ViewModel.Factories
private CreateViewModel<BuildingsiteListViewModel> _createBuildingsiteListViewModel;
private CreateViewModel<SewerObjectListViewModel> _createSewerObjectListViewModel;
public ViewModelAbstractFactory(
public MainWindowViewModelFactory(
CreateViewModel<HomeViewModel> createHomeViewModel,
CreateViewModel<ClientListViewModel> createClientListViewModel,
CreateViewModel<ClientEditViewModel> createClientEditViewModel,
@@ -35,22 +35,22 @@ namespace DaSaSo.ViewModel.Factories
_createSewerObjectListViewModel = createSewerObjectListViewModel;
}
public BaseViewModel CreateViewModel(EViewType viewType)
public BaseViewModel CreateViewModel(EMainWindowViewType viewType)
{
switch (viewType)
{
case EViewType.Home:
case EMainWindowViewType.Home:
return _createHomeViewModel();
case EViewType.Clients:
case EMainWindowViewType.Clients:
return _createClientListViewModel();
case EViewType.ClientEdit:
case EMainWindowViewType.ClientEdit:
return _createClientEditViewModel();
case EViewType.Projects:
case EMainWindowViewType.Projects:
return _createProjektListViewModel();
case EViewType.Buildingsites:
case EMainWindowViewType.Buildingsites:
return _createBuildingsiteListViewModel();
case EViewType.SewerObjects:
case EMainWindowViewType.SewerObjects:
return _createSewerObjectListViewModel();
default:

View File

@@ -12,12 +12,17 @@ namespace DaSaSo.ViewModel.Interface
event EventHandler? ClientChanged;
event EventHandler? ProjectChanged;
event EventHandler? BuildingSiteChanged;
event EventHandler? SewerObjectChanged;
Client AktuellClient { get; }
Project AktuellProjekt { get; }
Buildingsite AktuellBaustelle { get; }
SewerObject AktuellSewerObject { get; }
void SetClient(Client client);
void SetProject(Project project);
void SetBuildingSite(Buildingsite buildingsite);
void SetSewerObject(SewerObject sewerObject);
void ResetProject();
void ResetBuildingSite();
}
}

View File

@@ -10,6 +10,6 @@ namespace DaSaSo.ViewModel.Interface
public interface INavigator
{
BaseViewModel CurrentViewModel { get; set; }
event Action StateChanged;
}
}

View File

@@ -9,6 +9,6 @@ namespace DaSaSo.ViewModel.Interface
{
public interface IViewModelAbstractFactory
{
BaseViewModel CreateViewModel(EViewType viewType);
BaseViewModel CreateViewModel(EMainWindowViewType viewType);
}
}

View File

@@ -0,0 +1,13 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DaSaSo.ViewModel.Interface
{
public interface IWindowService
{
void ShowWindow<T>(object DataContext);
}
}

View File

@@ -38,10 +38,11 @@ namespace DaSaSo.ViewModel
{
SewerObject? SelectedSewer = GetSelectedSewer();
if (SelectedSewer == null) return;
Debugger.Break();
}
private SewerObject? GetSelectedSewer()
public SewerObject? GetSelectedSewer()
{
SewerObject? result = null;
foreach(SewerObjectsToStreet? streetcollection in SewerObjects)
@@ -57,7 +58,6 @@ namespace DaSaSo.ViewModel
if (result != null)
break;
}
return result;
}

View File

@@ -10,14 +10,18 @@ namespace DaSaSo.ViewModel.State.ActualState
{
public class ActualProject : IActualProject
{
public Client AktuellClient { get; private set; }
public Buildingsite AktuellBaustelle { get; private set; }
public Project AktuellProjekt { get; private set; }
public Client? AktuellClient { get; private set; }
public Buildingsite? AktuellBaustelle { get; private set; }
public Project? AktuellProjekt { get; private set; }
public SewerObject? AktuellSewerObject { get; private set; }
#region events
public event EventHandler? ClientChanged;
public event EventHandler? ProjectChanged;
public event EventHandler? BuildingSiteChanged;
public event EventHandler? SewerObjectChanged;
protected void OnClientChanged()
{
ClientChanged?.Invoke(this, new EventArgs());
@@ -48,5 +52,22 @@ namespace DaSaSo.ViewModel.State.ActualState
AktuellBaustelle = buildingsite;
OnBuildingSiteChanged();
}
public void SetSewerObject(SewerObject sewerObject)
{
AktuellSewerObject = sewerObject;
}
public void ResetProject()
{
SetProject(null);
ResetBuildingSite();
}
public void ResetBuildingSite()
{
SetBuildingSite(null);
}
}
}

View File

@@ -15,9 +15,11 @@ namespace DaSaSo.ViewModel.State.Navigation
get => _currentViewModel;
set
{
_currentViewModel?.Dispose();
_currentViewModel = value;
OnPropertyChanged();
StateChanged?.Invoke();
}
}
public event Action StateChanged;
}
}

View File

@@ -27,8 +27,9 @@ namespace DaSaSo.ViewModel
public bool CanSelectBuildingSite { get => _actualProject.AktuellProjekt != null; }
public bool CanSelectSewerObjects { get => _actualProject.AktuellBaustelle != null; }
public INavigator Navigator { get; set; }
public INavigator _navigator { get; set; }
public ICommand UpdateCurrentViewModelCommand { get; }
public BaseViewModel CurrentViewModel => _navigator.CurrentViewModel;
public string ClientName
{
@@ -70,32 +71,43 @@ namespace DaSaSo.ViewModel
public MainWindowViewModel(INavigator navigator,IViewModelAbstractFactory viewModelFactory, IActualProject actualProject)
{
this.Navigator = navigator;
this._navigator = navigator;
this.viewModelFactory = viewModelFactory;
_navigator.StateChanged += _navigator_StateChanged;
UpdateCurrentViewModelCommand = new UpdateCurrentViewModelCommand(navigator, viewModelFactory);
UpdateCurrentViewModelCommand.Execute(EViewType.Home);
UpdateCurrentViewModelCommand.Execute(EMainWindowViewType.Home);
_actualProject = actualProject;
_actualProject.ClientChanged += _actualProject_ClientChanged;
_actualProject.ProjectChanged += _actualProject_ProjectChanged;
_actualProject.BuildingSiteChanged += _actualProject_BuildingSiteChanged;
}
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);
}
}
}