From bbffb270bca99ecfe5bc01fd0359b4e3f29e9996 Mon Sep 17 00:00:00 2001 From: HuskyTeufel Date: Tue, 14 Sep 2021 19:08:55 +0200 Subject: [PATCH] Client wird gespeichert mittels interface --- DaSaSo.ViewModel/ClientEditViewModel.cs | 7 ++- DaSaSo.ViewModel/ClientListViewModel.cs | 17 +++--- .../Commands/SelectClientCommand.cs | 33 +++++++++++ DaSaSo.ViewModel/Enums/EViewType.cs | 1 + .../Factories/ClientEditViewModelFactory.cs | 27 +++++++++ .../Factories/ClientListViewModelFactory.cs | 9 ++- .../Factories/ViewModelAbstractFactory.cs | 12 ++-- DaSaSo.ViewModel/Interface/IActualProject.cs | 18 ++++++ .../State/ActualState/ActualProject.cs | 24 ++++++++ .../Window/MainWindowViewModel.cs | 56 +++---------------- DaSaSo.Wpf/App.xaml.cs | 11 ++-- DaSaSo.Wpf/Controls/NavigationBar.xaml | 2 +- DaSaSo.Wpf/View/Client/ClientListView.xaml | 2 +- 13 files changed, 149 insertions(+), 70 deletions(-) create mode 100644 DaSaSo.ViewModel/Commands/SelectClientCommand.cs create mode 100644 DaSaSo.ViewModel/Factories/ClientEditViewModelFactory.cs create mode 100644 DaSaSo.ViewModel/Interface/IActualProject.cs create mode 100644 DaSaSo.ViewModel/State/ActualState/ActualProject.cs diff --git a/DaSaSo.ViewModel/ClientEditViewModel.cs b/DaSaSo.ViewModel/ClientEditViewModel.cs index ee869e9..ba2f06a 100644 --- a/DaSaSo.ViewModel/ClientEditViewModel.cs +++ b/DaSaSo.ViewModel/ClientEditViewModel.cs @@ -1,5 +1,6 @@ using DaSaSo.Domain.Model; using DaSaSo.Domain.Services; +using DaSaSo.ViewModel.Interface; using Microsoft.Toolkit.Mvvm.Input; using System; using System.Collections.Generic; @@ -14,17 +15,19 @@ namespace DaSaSo.ViewModel { private Client _model; private IDataService _dataService; + private readonly IActualProject _actualProject; public Client Model { get => _model; set => _model = value; } public IRelayCommand SaveClientCommand { get; set; } - public ClientEditViewModel(IDataService dataService, Client model) + public ClientEditViewModel(IDataService dataService, IActualProject actualProject) { - this._model = model; this._dataService = dataService; SaveClientCommand = new RelayCommand(SaveClient); + _actualProject = actualProject; + this._model = _actualProject.AktuellClient; } private void SaveClient() diff --git a/DaSaSo.ViewModel/ClientListViewModel.cs b/DaSaSo.ViewModel/ClientListViewModel.cs index 1f2b626..595fbef 100644 --- a/DaSaSo.ViewModel/ClientListViewModel.cs +++ b/DaSaSo.ViewModel/ClientListViewModel.cs @@ -1,5 +1,7 @@ using DaSaSo.Domain.Model; using DaSaSo.Domain.Services; +using DaSaSo.ViewModel.Commands; +using DaSaSo.ViewModel.Interface; using Microsoft.Toolkit.Mvvm.Input; using System; using System.Collections.Generic; @@ -20,7 +22,7 @@ namespace DaSaSo.ViewModel IEnumerable? result; bool _isLoading = true; - public IRelayCommand SelectClientCommand { get; set; } + public ICommand SelectCommand { get; set; } public IRelayCommand EditClientCommand { get; set; } public IRelayCommand AddNewClientCommand { get; set; } @@ -32,8 +34,8 @@ namespace DaSaSo.ViewModel if(_selectedClient != value) { _selectedClient = value; - SelectClientCommand.NotifyCanExecuteChanged(); - EditClientCommand.NotifyCanExecuteChanged(); + //SelectClientCommand.NotifyCanExecuteChanged(); + //EditClientCommand.NotifyCanExecuteChanged(); OnPropertyChanged(); } } @@ -52,16 +54,16 @@ namespace DaSaSo.ViewModel } } - public ClientListViewModel(IDataService dataService) + public ClientListViewModel(IDataService dataService, IActualProject actualProject) { Clients = new ObservableCollection(); _dataService = dataService; LoadClient(); - SelectClientCommand = new RelayCommand(SelectClient, () => SelectedClient != null); - EditClientCommand = new RelayCommand(EditClient, () => SelectedClient != null); - AddNewClientCommand = new RelayCommand(AddNewClient); + SelectCommand = new SelectClientCommand(actualProject,this); //= new RelayCommand(SelectClient, () => SelectedClient != null); + //EditClientCommand = new RelayCommand(EditClient, () => SelectedClient != null); + //AddNewClientCommand = new RelayCommand(AddNewClient); } @@ -93,6 +95,7 @@ namespace DaSaSo.ViewModel private void SelectClient() { + Mediator.Notify(Enums.EMediator.SELECTEDCLIENT, SelectedClient); } diff --git a/DaSaSo.ViewModel/Commands/SelectClientCommand.cs b/DaSaSo.ViewModel/Commands/SelectClientCommand.cs new file mode 100644 index 0000000..ac0a6e1 --- /dev/null +++ b/DaSaSo.ViewModel/Commands/SelectClientCommand.cs @@ -0,0 +1,33 @@ +using DaSaSo.ViewModel.Interface; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Input; + +namespace DaSaSo.ViewModel.Commands +{ + public class SelectClientCommand : ICommand + { + public event EventHandler? CanExecuteChanged; + private readonly IActualProject _actualProject; + private readonly ClientListViewModel _clientListViewModel; + public SelectClientCommand(IActualProject actualProject, ClientListViewModel clientListViewModel) + { + _actualProject = actualProject; + _clientListViewModel = clientListViewModel; + } + + public bool CanExecute(object? parameter) + { + return true; + } + + public void Execute(object? parameter) + { + var s = _clientListViewModel.SelectedClient; + _actualProject.SetClient(s); + } + } +} diff --git a/DaSaSo.ViewModel/Enums/EViewType.cs b/DaSaSo.ViewModel/Enums/EViewType.cs index 87de7db..44f6ee9 100644 --- a/DaSaSo.ViewModel/Enums/EViewType.cs +++ b/DaSaSo.ViewModel/Enums/EViewType.cs @@ -10,6 +10,7 @@ namespace DaSaSo.ViewModel.Enums { Home, Clients, + ClientEdit, Projects, Buildingsites, SewerObjects diff --git a/DaSaSo.ViewModel/Factories/ClientEditViewModelFactory.cs b/DaSaSo.ViewModel/Factories/ClientEditViewModelFactory.cs new file mode 100644 index 0000000..f429aba --- /dev/null +++ b/DaSaSo.ViewModel/Factories/ClientEditViewModelFactory.cs @@ -0,0 +1,27 @@ +using DaSaSo.Domain.Model; +using DaSaSo.EntityFramework; +using DaSaSo.EntityFramework.Services; +using DaSaSo.ViewModel.Interface; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DaSaSo.ViewModel.Factories +{ + public class ClientEditViewModelFactory : IViewModelFactory + { + private readonly IActualProject _actualProject; + + public ClientEditViewModelFactory(IActualProject actualProject) + { + _actualProject = actualProject; + } + + public ClientEditViewModel CreateViewModel() + { + return new ClientEditViewModel(new GenericDataService(new DaSaSoDbContextFactory()), _actualProject); + } + } +} diff --git a/DaSaSo.ViewModel/Factories/ClientListViewModelFactory.cs b/DaSaSo.ViewModel/Factories/ClientListViewModelFactory.cs index 129fe91..fc50dc6 100644 --- a/DaSaSo.ViewModel/Factories/ClientListViewModelFactory.cs +++ b/DaSaSo.ViewModel/Factories/ClientListViewModelFactory.cs @@ -12,9 +12,16 @@ namespace DaSaSo.ViewModel.Factories { public class ClientListViewModelFactory : IViewModelFactory { + private readonly IActualProject _actualProject; + + public ClientListViewModelFactory(IActualProject actualProject) + { + _actualProject = actualProject; + } + public ClientListViewModel CreateViewModel() { - return new ClientListViewModel(new GenericDataService(new DaSaSoDbContextFactory())); + return new ClientListViewModel(new GenericDataService(new DaSaSoDbContextFactory()),_actualProject); } } } diff --git a/DaSaSo.ViewModel/Factories/ViewModelAbstractFactory.cs b/DaSaSo.ViewModel/Factories/ViewModelAbstractFactory.cs index d9d3cac..e344093 100644 --- a/DaSaSo.ViewModel/Factories/ViewModelAbstractFactory.cs +++ b/DaSaSo.ViewModel/Factories/ViewModelAbstractFactory.cs @@ -14,12 +14,14 @@ namespace DaSaSo.ViewModel.Factories public class ViewModelAbstractFactory : IViewModelAbstractFactory { private IViewModelFactory _homeViewModelFactory; - private IViewModelFactory _clientListViewModel; + private IViewModelFactory _clientListViewModelFactory; + private IViewModelFactory _clientEditViewModelFactory; - public ViewModelAbstractFactory(IViewModelFactory homeViewModelFactory, IViewModelFactory clientListViewModel) + public ViewModelAbstractFactory(IViewModelFactory homeViewModelFactory, IViewModelFactory clientListViewModel, IViewModelFactory clientEditViewModel) { _homeViewModelFactory = homeViewModelFactory; - _clientListViewModel = clientListViewModel; + _clientListViewModelFactory = clientListViewModel; + _clientEditViewModelFactory = clientEditViewModel; } public BaseViewModel CreateViewModel(EViewType viewType) @@ -30,7 +32,9 @@ namespace DaSaSo.ViewModel.Factories case EViewType.Home: return _homeViewModelFactory.CreateViewModel(); case EViewType.Clients: - return _clientListViewModel.CreateViewModel(); + return _clientListViewModelFactory.CreateViewModel(); + case EViewType.ClientEdit: + return _clientEditViewModelFactory.CreateViewModel(); /*case EViewType.Projects: break; case EViewType.Buildingsites: diff --git a/DaSaSo.ViewModel/Interface/IActualProject.cs b/DaSaSo.ViewModel/Interface/IActualProject.cs new file mode 100644 index 0000000..c0a3c25 --- /dev/null +++ b/DaSaSo.ViewModel/Interface/IActualProject.cs @@ -0,0 +1,18 @@ +using DaSaSo.Domain.Model; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DaSaSo.ViewModel.Interface +{ + public interface IActualProject + { + Client AktuellClient { get; } + Project AktuellProjekt { get; } + Buildingsite AktuellBaustelle { get; } + + void SetClient(Client client); + } +} diff --git a/DaSaSo.ViewModel/State/ActualState/ActualProject.cs b/DaSaSo.ViewModel/State/ActualState/ActualProject.cs new file mode 100644 index 0000000..a34e9fd --- /dev/null +++ b/DaSaSo.ViewModel/State/ActualState/ActualProject.cs @@ -0,0 +1,24 @@ +using DaSaSo.Domain.Model; +using DaSaSo.ViewModel.Interface; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +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 void SetClient(Client client) + { + AktuellClient = client; + } + } +} diff --git a/DaSaSo.ViewModel/Window/MainWindowViewModel.cs b/DaSaSo.ViewModel/Window/MainWindowViewModel.cs index 0194f0f..4768fcc 100644 --- a/DaSaSo.ViewModel/Window/MainWindowViewModel.cs +++ b/DaSaSo.ViewModel/Window/MainWindowViewModel.cs @@ -17,44 +17,22 @@ namespace DaSaSo.ViewModel { public sealed class MainWindowViewModel : BaseViewModel { - private BaseViewModel _actualViewModel; + private Client _selectedClient; private Project _selectedProject; private Buildingsite _selectedBuildingsite; public INavigator Navigator { get; set; } - public IRelayCommand ListClientsCommand { get; set; } - public IRelayCommand ListProjectCommand { get; set; } - public IRelayCommand ListBuildingsiteCommand { get; set; } - public IRelayCommand ListSewerObjectsCommand { get; set; } - - public BaseViewModel ActualViewModel - { - get => _actualViewModel; - set - { - if(_actualViewModel != value) - { - _actualViewModel = value; - OnPropertyChanged(); - } - } - } public Project SelectedProject { get => _selectedProject; set { - if(value == null) - { - ListBuildingsiteCommand.NotifyCanExecuteChanged(); - } - if(_selectedProject != value && value != null) + if(_selectedProject != value) { _selectedProject = value; OnPropertyChanged(); - ListBuildingsiteCommand.NotifyCanExecuteChanged(); } } } @@ -63,15 +41,10 @@ namespace DaSaSo.ViewModel get => _selectedBuildingsite; set { - if(value == null) - { - ListSewerObjectsCommand.NotifyCanExecuteChanged(); - } - if(_selectedBuildingsite != value && value != null) + if(_selectedBuildingsite != value) { _selectedBuildingsite = value; OnPropertyChanged(); - ListSewerObjectsCommand.NotifyCanExecuteChanged(); } } } @@ -84,9 +57,8 @@ namespace DaSaSo.ViewModel if(_selectedClient != value) { _selectedClient = value; - SelectedProject = null; + //SelectedProject = null; OnPropertyChanged(); - ListProjectCommand.NotifyCanExecuteChanged(); } } } @@ -94,10 +66,7 @@ namespace DaSaSo.ViewModel { this.Navigator = navigator; Navigator.UpdateViewModelCommand.Execute(EViewType.Home); - ListClientsCommand = new RelayCommand(showClients); - ListProjectCommand = new RelayCommand(listProjecte, () => SelectedClient != null); - ListBuildingsiteCommand = new RelayCommand(listBuildingsite, () => SelectedProject != null); - ListSewerObjectsCommand = new RelayCommand(listSewerObjects, () => SelectedBuildingsite != null); + Mediator.Subscribe(Enums.EMediator.SELECTEDCLIENT, (tt) => { @@ -107,20 +76,14 @@ namespace DaSaSo.ViewModel Mediator.Subscribe(Enums.EMediator.EDITCLIENT, (tt) => { - ActualViewModel = new ClientEditViewModel(new GenericDataService(new DaSaSoDbContextFactory()), - (Client)tt); + }); Mediator.Subscribe(Enums.EMediator.SHOWCLIENT, (tt) => { - ActualViewModel = null; + }); } - private void showClients() - { - ClientListViewModel clientListViewModel = new ClientListViewModel(new GenericDataService(new DaSaSoDbContextFactory())); - ActualViewModel = clientListViewModel; - clientListViewModel.LoadClient(); - } + private void listSewerObjects() { @@ -134,8 +97,7 @@ namespace DaSaSo.ViewModel private void listProjecte() { - Debugger.Break(); - ActualViewModel = new ProjectListViewModel(new GenericDataService(new DaSaSoDbContextFactory()),SelectedClient); + } } } diff --git a/DaSaSo.Wpf/App.xaml.cs b/DaSaSo.Wpf/App.xaml.cs index f41a6d1..7b44d3c 100644 --- a/DaSaSo.Wpf/App.xaml.cs +++ b/DaSaSo.Wpf/App.xaml.cs @@ -1,19 +1,14 @@ using DaSaSo.Domain.Model; using DaSaSo.Domain.Services; -using DaSaSo.Domain.Services.ClientServices; using DaSaSo.EntityFramework; using DaSaSo.EntityFramework.Services; using DaSaSo.ViewModel; using DaSaSo.ViewModel.Factories; using DaSaSo.ViewModel.Interface; +using DaSaSo.ViewModel.State.ActualState; using DaSaSo.ViewModel.State.Navigation; using Microsoft.Extensions.DependencyInjection; using System; -using System.Collections.Generic; -using System.Configuration; -using System.Data; -using System.Linq; -using System.Threading.Tasks; using System.Windows; namespace DaSaSo.Wpf @@ -23,7 +18,7 @@ namespace DaSaSo.Wpf /// public partial class App : Application { - protected override async void OnStartup(StartupEventArgs e) + protected override void OnStartup(StartupEventArgs e) { IServiceProvider serviceProvider = CreateServiceProvider(); @@ -43,6 +38,8 @@ namespace DaSaSo.Wpf services.AddSingleton(); services.AddSingleton, HomeViewModelFactory>(); services.AddSingleton, ClientListViewModelFactory>(); + services.AddSingleton, ClientEditViewModelFactory>(); + services.AddScoped(); services.AddScoped(); services.AddScoped(); diff --git a/DaSaSo.Wpf/Controls/NavigationBar.xaml b/DaSaSo.Wpf/Controls/NavigationBar.xaml index 8915f40..2d8a64f 100644 --- a/DaSaSo.Wpf/Controls/NavigationBar.xaml +++ b/DaSaSo.Wpf/Controls/NavigationBar.xaml @@ -15,7 +15,7 @@ - + diff --git a/DaSaSo.Wpf/View/Client/ClientListView.xaml b/DaSaSo.Wpf/View/Client/ClientListView.xaml index db0246d..131bc77 100644 --- a/DaSaSo.Wpf/View/Client/ClientListView.xaml +++ b/DaSaSo.Wpf/View/Client/ClientListView.xaml @@ -13,7 +13,7 @@ -