From debecff6867daaf42cb11125d587eb1f47f0819d Mon Sep 17 00:00:00 2001 From: HuskyTeufel Date: Wed, 29 Sep 2021 18:36:56 +0200 Subject: [PATCH] Renavigator umgebaut --- DaSaSo.ViewModel/BuildingsiteEditViewModel.cs | 2 +- DaSaSo.ViewModel/ClientEditViewModel.cs | 2 +- DaSaSo.ViewModel/ClientListViewModel.cs | 10 +++- .../Commands/AddBuildingsiteCommand.cs | 2 +- DaSaSo.ViewModel/Commands/AddClientCommand.cs | 2 +- .../Commands/AddProjectCommand.cs | 2 +- .../Commands/EditBuildingsiteCommand.cs | 2 +- .../Commands/EditClientCommand.cs | 2 +- .../Commands/EditProjectCommand.cs | 2 +- DaSaSo.ViewModel/Commands/SaveSewerCommand.cs | 2 +- DaSaSo.ViewModel/Interface/IRenavigator.cs | 2 +- DaSaSo.ViewModel/ProjectEditViewModel.cs | 2 +- DaSaSo.ViewModel/SewerMainListViewModel.cs | 6 ++ .../ViewModelDelegateRenavigator.cs | 11 ++-- .../AddServicesHostBuilderExtensions.cs | 2 +- .../AddViewModelsHostBuilderExtensions.cs | 57 +++++++++++++------ DaSaSo.Wpf/appsettings.json | 2 +- 17 files changed, 73 insertions(+), 37 deletions(-) diff --git a/DaSaSo.ViewModel/BuildingsiteEditViewModel.cs b/DaSaSo.ViewModel/BuildingsiteEditViewModel.cs index f4c85ef..27c5354 100644 --- a/DaSaSo.ViewModel/BuildingsiteEditViewModel.cs +++ b/DaSaSo.ViewModel/BuildingsiteEditViewModel.cs @@ -75,7 +75,7 @@ namespace DaSaSo.ViewModel private void SaveBuildingsite() { _buildingsiteService.Update(Model.Id, Model); - _renavigator.Renavigate(new BuildingsiteListViewModel(_buildingsiteService, _actualProject, _renavigator, null)); + _renavigator.Renavigate(); } } } diff --git a/DaSaSo.ViewModel/ClientEditViewModel.cs b/DaSaSo.ViewModel/ClientEditViewModel.cs index f331e11..fc88421 100644 --- a/DaSaSo.ViewModel/ClientEditViewModel.cs +++ b/DaSaSo.ViewModel/ClientEditViewModel.cs @@ -35,7 +35,7 @@ namespace DaSaSo.ViewModel private void SaveClient() { _dataService.Update(Model.Id, Model); - renavigator.Renavigate(new ClientListViewModel(_dataService,_actualProject,renavigator)); + renavigator.Renavigate(); } } } diff --git a/DaSaSo.ViewModel/ClientListViewModel.cs b/DaSaSo.ViewModel/ClientListViewModel.cs index 48c01f3..00bb5cc 100644 --- a/DaSaSo.ViewModel/ClientListViewModel.cs +++ b/DaSaSo.ViewModel/ClientListViewModel.cs @@ -59,18 +59,22 @@ namespace DaSaSo.ViewModel public bool CanSelectClient => _selectedClient != null; - public ClientListViewModel(IDataService dataService, IActualProject actualProject, IRenavigator renavigator) + public ClientListViewModel(IDataService dataService, IActualProject actualProject, IRenavigator editRenavigator) { Clients = new ObservableCollection(); _dataService = dataService; this.renavigator = renavigator; LoadClient(); SelectCommand = new SelectClientCommand(actualProject, this); //= new RelayCommand(SelectClient, () => SelectedClient != null); - EditCommand = new EditClientCommand(_dataService,actualProject,renavigator,this); - AddNewClientCommand = new AddClientCommand(_dataService, actualProject, renavigator, this); + EditCommand = new EditClientCommand(_dataService,actualProject, editRenavigator, this); + AddNewClientCommand = new AddClientCommand(_dataService, actualProject, editRenavigator, this); } + ~ClientListViewModel() + { + + } public async void LoadClient() { diff --git a/DaSaSo.ViewModel/Commands/AddBuildingsiteCommand.cs b/DaSaSo.ViewModel/Commands/AddBuildingsiteCommand.cs index 6ed4115..a1408bc 100644 --- a/DaSaSo.ViewModel/Commands/AddBuildingsiteCommand.cs +++ b/DaSaSo.ViewModel/Commands/AddBuildingsiteCommand.cs @@ -28,7 +28,7 @@ namespace DaSaSo.ViewModel.Commands { Buildingsite buildingsite = await _buildingsiteService.CreateBuildingsite(_actualProject.AktuellProjekt); _actualProject.SetBuildingSite(buildingsite); - _renavigator.Renavigate(new BuildingsiteEditViewModel(_dataservice, _actualProject, _renavigator)); + _renavigator.Renavigate(); } } } diff --git a/DaSaSo.ViewModel/Commands/AddClientCommand.cs b/DaSaSo.ViewModel/Commands/AddClientCommand.cs index 53e83b2..b1cfab5 100644 --- a/DaSaSo.ViewModel/Commands/AddClientCommand.cs +++ b/DaSaSo.ViewModel/Commands/AddClientCommand.cs @@ -30,7 +30,7 @@ namespace DaSaSo.ViewModel.Commands Client newClient = await dataservice.Create(new Client()); actualProject.SetClient(newClient,false); //actualProject.SetClient(clientListViewModel.SelectedClient); - renavigator.Renavigate(new ClientEditViewModel(dataservice, actualProject, renavigator)); + renavigator.Renavigate(); } } } diff --git a/DaSaSo.ViewModel/Commands/AddProjectCommand.cs b/DaSaSo.ViewModel/Commands/AddProjectCommand.cs index c61d96e..b5862d0 100644 --- a/DaSaSo.ViewModel/Commands/AddProjectCommand.cs +++ b/DaSaSo.ViewModel/Commands/AddProjectCommand.cs @@ -31,7 +31,7 @@ namespace DaSaSo.ViewModel.Commands { Project pro = await _projectService.CreateProject(_actualProject.AktuellClient); _actualProject.SetProject(pro); - _renavigator.Renavigate(new ProjectEditViewModel(_genericDataService, _actualProject, _renavigator, _projectService)); + _renavigator.Renavigate(); } } diff --git a/DaSaSo.ViewModel/Commands/EditBuildingsiteCommand.cs b/DaSaSo.ViewModel/Commands/EditBuildingsiteCommand.cs index 0e1464f..610e0a3 100644 --- a/DaSaSo.ViewModel/Commands/EditBuildingsiteCommand.cs +++ b/DaSaSo.ViewModel/Commands/EditBuildingsiteCommand.cs @@ -42,7 +42,7 @@ namespace DaSaSo.ViewModel.Commands public override async Task ExecuteAsync(object? parameter) { actualProject.SetBuildingSite(_buildingsiteListViewModel.SelectedBuildingsite); - renavigator.Renavigate(new BuildingsiteEditViewModel(buildingSiteDataService, actualProject, renavigator)); + renavigator.Renavigate(); } } } diff --git a/DaSaSo.ViewModel/Commands/EditClientCommand.cs b/DaSaSo.ViewModel/Commands/EditClientCommand.cs index ccb770c..9f7e7e2 100644 --- a/DaSaSo.ViewModel/Commands/EditClientCommand.cs +++ b/DaSaSo.ViewModel/Commands/EditClientCommand.cs @@ -45,7 +45,7 @@ namespace DaSaSo.ViewModel.Commands public override async Task ExecuteAsync(object? parameter) { actualProject.SetClient(_clientListViewModel.SelectedClient); - renavigator.Renavigate(new ClientEditViewModel(dataservice,actualProject,renavigator)); + renavigator.Renavigate(); } } } diff --git a/DaSaSo.ViewModel/Commands/EditProjectCommand.cs b/DaSaSo.ViewModel/Commands/EditProjectCommand.cs index a7e2c78..2d7a143 100644 --- a/DaSaSo.ViewModel/Commands/EditProjectCommand.cs +++ b/DaSaSo.ViewModel/Commands/EditProjectCommand.cs @@ -42,7 +42,7 @@ namespace DaSaSo.ViewModel.Commands public override async Task ExecuteAsync(object? parameter) { _actualProject.SetProject(_projectListViewModel.SelectedProject); - _renavigator.Renavigate(new ProjectEditViewModel(_dataService, _actualProject, _renavigator,_projectService)); + _renavigator.Renavigate(); } } } diff --git a/DaSaSo.ViewModel/Commands/SaveSewerCommand.cs b/DaSaSo.ViewModel/Commands/SaveSewerCommand.cs index 20a2676..adfea0a 100644 --- a/DaSaSo.ViewModel/Commands/SaveSewerCommand.cs +++ b/DaSaSo.ViewModel/Commands/SaveSewerCommand.cs @@ -42,7 +42,7 @@ namespace DaSaSo.ViewModel.Commands public override async Task ExecuteAsync(object? parameter) { _navigator.CurrentViewModel = null; - _renavigator.Renavigate(new SewerObjectListViewModel(_dataService, _actualProject, _sewerObjectService)); + _renavigator.Renavigate(); } } } diff --git a/DaSaSo.ViewModel/Interface/IRenavigator.cs b/DaSaSo.ViewModel/Interface/IRenavigator.cs index 3066d97..b744d9a 100644 --- a/DaSaSo.ViewModel/Interface/IRenavigator.cs +++ b/DaSaSo.ViewModel/Interface/IRenavigator.cs @@ -8,6 +8,6 @@ namespace DaSaSo.ViewModel.Interface { public interface IRenavigator { - void Renavigate(BaseViewModel target); + void Renavigate(); } } diff --git a/DaSaSo.ViewModel/ProjectEditViewModel.cs b/DaSaSo.ViewModel/ProjectEditViewModel.cs index 4598312..bb6fe7e 100644 --- a/DaSaSo.ViewModel/ProjectEditViewModel.cs +++ b/DaSaSo.ViewModel/ProjectEditViewModel.cs @@ -62,7 +62,7 @@ namespace DaSaSo.ViewModel private void SaveProject() { _dataservice.Update(_model.Id, _model); - _renavigator.Renavigate(new ProjectListViewModel(_dataservice, _actualProject, _renavigator, _projectService)); + _renavigator.Renavigate(); } } } diff --git a/DaSaSo.ViewModel/SewerMainListViewModel.cs b/DaSaSo.ViewModel/SewerMainListViewModel.cs index c8101b5..cc1b995 100644 --- a/DaSaSo.ViewModel/SewerMainListViewModel.cs +++ b/DaSaSo.ViewModel/SewerMainListViewModel.cs @@ -65,5 +65,11 @@ namespace DaSaSo.ViewModel _actualProject.SetSewerObject(sewer,false); IsLoading = false; } + + public override void Dispose() + { + _navigator.StateChanged -= () => OnPropertyChanged(nameof(CurrentSewerViewModel)); + base.Dispose(); + } } } diff --git a/DaSaSo.ViewModel/State/Navigation/ViewModelDelegateRenavigator.cs b/DaSaSo.ViewModel/State/Navigation/ViewModelDelegateRenavigator.cs index d7714d7..d174446 100644 --- a/DaSaSo.ViewModel/State/Navigation/ViewModelDelegateRenavigator.cs +++ b/DaSaSo.ViewModel/State/Navigation/ViewModelDelegateRenavigator.cs @@ -7,19 +7,20 @@ using System.Threading.Tasks; namespace DaSaSo.ViewModel.State.Navigation { - public class ViewModelDelegateRenavigator : IRenavigator + public class ViewModelDelegateRenavigator : IRenavigator where TViewModel: BaseViewModel { private readonly IMainWindowNavigator _navigator; - + private readonly CreateViewModel _createViewModel; - public ViewModelDelegateRenavigator(IMainWindowNavigator navigator) + public ViewModelDelegateRenavigator(IMainWindowNavigator navigator, CreateViewModel createViewModel) { _navigator = navigator; + _createViewModel = createViewModel; } - public void Renavigate(BaseViewModel target) + public void Renavigate() { - _navigator.CurrentViewModel = target; + _navigator.CurrentViewModel = _createViewModel(); } } } diff --git a/DaSaSo.Wpf/HostBuilders/AddServicesHostBuilderExtensions.cs b/DaSaSo.Wpf/HostBuilders/AddServicesHostBuilderExtensions.cs index 32790e4..950d7e8 100644 --- a/DaSaSo.Wpf/HostBuilders/AddServicesHostBuilderExtensions.cs +++ b/DaSaSo.Wpf/HostBuilders/AddServicesHostBuilderExtensions.cs @@ -23,7 +23,7 @@ namespace DaSaSo.Wpf.HostBuilders { services.AddSingleton, ClientDataService>(); services.AddSingleton, ProjectDataService>(); - services.AddSingleton, BuildingsiteDataService>(); + services.AddTransient, BuildingsiteDataService>(); services.AddSingleton, SewerObjectDataService>(); services.AddSingleton, SewerpointDataService>(); services.AddSingleton(); diff --git a/DaSaSo.Wpf/HostBuilders/AddViewModelsHostBuilderExtensions.cs b/DaSaSo.Wpf/HostBuilders/AddViewModelsHostBuilderExtensions.cs index 3ae316a..5a90788 100644 --- a/DaSaSo.Wpf/HostBuilders/AddViewModelsHostBuilderExtensions.cs +++ b/DaSaSo.Wpf/HostBuilders/AddViewModelsHostBuilderExtensions.cs @@ -28,18 +28,38 @@ namespace DaSaSo.Wpf.HostBuilders services.AddTransient(); services.AddSingleton(); + services.AddSingleton>(); + services.AddSingleton>(); + + services.AddSingleton>(); + services.AddSingleton>(); + + services.AddSingleton>(); + services.AddSingleton>(); + + services.AddSingleton>(); + services.AddSingleton>(services => { return () => new HomeViewModel(); }); - services.AddSingleton>(services => + services.AddTransient>(services => { return () => new ClientEditViewModel( services.GetRequiredService>(), services.GetRequiredService(), - new ViewModelDelegateRenavigator( - services.GetRequiredService() - )); + services.GetRequiredService>() + ); + + }); + services.AddTransient>(services => + { + return () => new ProjectEditViewModel( + services.GetRequiredService>(), + services.GetRequiredService(), + services.GetRequiredService>(), + services.GetRequiredService() + ); }); services.AddSingleton>(services => { @@ -60,14 +80,14 @@ namespace DaSaSo.Wpf.HostBuilders services.GetRequiredService>()); }); - services.AddSingleton>(services => + services.AddTransient>(services => { return () => new ClientListViewModel( services.GetRequiredService>(), services.GetRequiredService(), - new ViewModelDelegateRenavigator( - services.GetRequiredService() - )); + services.GetRequiredService>() + ); + }); services.AddSingleton>(services => { @@ -76,9 +96,7 @@ namespace DaSaSo.Wpf.HostBuilders services.GetRequiredService(), services.GetRequiredService(), services.GetRequiredService(), - new ViewModelDelegateRenavigator( - services.GetRequiredService() - ), + services.GetRequiredService>(), services.GetRequiredService(), services.GetRequiredService() ); @@ -88,24 +106,31 @@ namespace DaSaSo.Wpf.HostBuilders return () => new ProjectListViewModel( services.GetRequiredService>(), services.GetRequiredService(), - new ViewModelDelegateRenavigator( - services.GetRequiredService()), + services.GetRequiredService>(), services.GetRequiredService() ); }); - services.AddSingleton>(services => + services.AddTransient>(services => { return () => new BuildingsiteListViewModel( services.GetRequiredService>(), services.GetRequiredService(), - new ViewModelDelegateRenavigator( - services.GetRequiredService()), + services.GetRequiredService>(), services.GetRequiredService() ); }); + services.AddTransient>(services => + { + return () => new BuildingsiteEditViewModel( + services.GetRequiredService>(), + services.GetRequiredService(), + services.GetRequiredService>() + ); + }); + services.AddSingleton>(services => { return () => new SewerObjectListViewModel( diff --git a/DaSaSo.Wpf/appsettings.json b/DaSaSo.Wpf/appsettings.json index 626e6f1..0da8e7f 100644 --- a/DaSaSo.Wpf/appsettings.json +++ b/DaSaSo.Wpf/appsettings.json @@ -1,6 +1,6 @@ { "ConnectionStrings": { - "databaseToUse": "sqlite", + "databaseToUse": "default", "default": "Host = localhost; Database = dasaso; Username = kansan; Password = kansan", "sqlite": "Data Source=database.db" }