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 9c9c825..8f5581b 100644 --- a/DaSaSo.ViewModel/SewerMainListViewModel.cs +++ b/DaSaSo.ViewModel/SewerMainListViewModel.cs @@ -81,5 +81,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 8952aeb..43742d0 100644 --- a/DaSaSo.Wpf/HostBuilders/AddViewModelsHostBuilderExtensions.cs +++ b/DaSaSo.Wpf/HostBuilders/AddViewModelsHostBuilderExtensions.cs @@ -28,20 +28,38 @@ namespace DaSaSo.Wpf.HostBuilders services.AddTransient(); services.AddSingleton(); - services.AddTransient(); + 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 => { @@ -65,14 +83,14 @@ namespace DaSaSo.Wpf.HostBuilders ); }); - services.AddSingleton>(services => + services.AddTransient>(services => { return () => new ClientListViewModel( services.GetRequiredService>(), services.GetRequiredService(), - new ViewModelDelegateRenavigator( - services.GetRequiredService() - )); + services.GetRequiredService>() + ); + }); services.AddSingleton>(services => { @@ -81,9 +99,7 @@ namespace DaSaSo.Wpf.HostBuilders services.GetRequiredService(), services.GetRequiredService(), services.GetRequiredService(), - new ViewModelDelegateRenavigator( - services.GetRequiredService() - ), + services.GetRequiredService>(), services.GetRequiredService(), services.GetRequiredService() ); @@ -93,24 +109,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(