diff --git a/DaSaSo.ViewModel/BaseViewModel.cs b/DaSaSo.ViewModel/BaseViewModel.cs index ced4172..a5fb34a 100644 --- a/DaSaSo.ViewModel/BaseViewModel.cs +++ b/DaSaSo.ViewModel/BaseViewModel.cs @@ -1,5 +1,6 @@ namespace DaSaSo.ViewModel { + public delegate TViewModel CreateViewModel() where TViewModel : BaseViewModel; public class BaseViewModel : ObservableObject { diff --git a/DaSaSo.ViewModel/Factories/ClientEditViewModelFactory.cs b/DaSaSo.ViewModel/Factories/ClientEditViewModelFactory.cs deleted file mode 100644 index 6d06a7a..0000000 --- a/DaSaSo.ViewModel/Factories/ClientEditViewModelFactory.cs +++ /dev/null @@ -1,29 +0,0 @@ -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; - private readonly IRenavigator renavigator; - - public ClientEditViewModelFactory(IActualProject actualProject, IRenavigator renavigator) - { - _actualProject = actualProject; - this.renavigator = renavigator; - } - - public ClientEditViewModel CreateViewModel() - { - return new ClientEditViewModel(new GenericDataService(new DaSaSoDbContextFactory()), _actualProject,renavigator); - } - } -} diff --git a/DaSaSo.ViewModel/Factories/ClientListViewModelFactory.cs b/DaSaSo.ViewModel/Factories/ClientListViewModelFactory.cs deleted file mode 100644 index 00d3c14..0000000 --- a/DaSaSo.ViewModel/Factories/ClientListViewModelFactory.cs +++ /dev/null @@ -1,29 +0,0 @@ -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 ClientListViewModelFactory : IViewModelFactory - { - private readonly IActualProject _actualProject; - private readonly IRenavigator renavigator; - - public ClientListViewModelFactory(IActualProject actualProject, IRenavigator renavigator) - { - _actualProject = actualProject; - this.renavigator = renavigator; - } - - public ClientListViewModel CreateViewModel() - { - return new ClientListViewModel(new GenericDataService(new DaSaSoDbContextFactory()),_actualProject, renavigator); - } - } -} diff --git a/DaSaSo.ViewModel/Factories/HomeViewModelFactory.cs b/DaSaSo.ViewModel/Factories/HomeViewModelFactory.cs deleted file mode 100644 index 7f8b4f1..0000000 --- a/DaSaSo.ViewModel/Factories/HomeViewModelFactory.cs +++ /dev/null @@ -1,17 +0,0 @@ -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 HomeViewModelFactory : IViewModelFactory - { - public HomeViewModel CreateViewModel() - { - return new HomeViewModel(); - } - } -} diff --git a/DaSaSo.ViewModel/Factories/ViewModelAbstractFactory.cs b/DaSaSo.ViewModel/Factories/ViewModelAbstractFactory.cs index e344093..666d6d2 100644 --- a/DaSaSo.ViewModel/Factories/ViewModelAbstractFactory.cs +++ b/DaSaSo.ViewModel/Factories/ViewModelAbstractFactory.cs @@ -13,15 +13,22 @@ namespace DaSaSo.ViewModel.Factories { public class ViewModelAbstractFactory : IViewModelAbstractFactory { - private IViewModelFactory _homeViewModelFactory; - private IViewModelFactory _clientListViewModelFactory; - private IViewModelFactory _clientEditViewModelFactory; + private CreateViewModel _createHomeViewModel; + private CreateViewModel _createClientListViewModel; + private CreateViewModel _createClientEditViewModel; + private CreateViewModel _createProjektListViewModel; - public ViewModelAbstractFactory(IViewModelFactory homeViewModelFactory, IViewModelFactory clientListViewModel, IViewModelFactory clientEditViewModel) + public ViewModelAbstractFactory( + CreateViewModel createHomeViewModel, + CreateViewModel createClientListViewModel/*, + CreateViewModel createClientEditViewModel, + CreateViewModel createProjektListViewModel*/ + ) { - _homeViewModelFactory = homeViewModelFactory; - _clientListViewModelFactory = clientListViewModel; - _clientEditViewModelFactory = clientEditViewModel; + _createHomeViewModel = createHomeViewModel; + _createClientListViewModel = createClientListViewModel; + /*_createClientEditViewModel = createClientEditViewModel; + _createProjektListViewModel = createProjektListViewModel;*/ } public BaseViewModel CreateViewModel(EViewType viewType) @@ -30,14 +37,14 @@ namespace DaSaSo.ViewModel.Factories switch (viewType) { case EViewType.Home: - return _homeViewModelFactory.CreateViewModel(); + return _createHomeViewModel(); case EViewType.Clients: - return _clientListViewModelFactory.CreateViewModel(); + return _createClientListViewModel(); case EViewType.ClientEdit: - return _clientEditViewModelFactory.CreateViewModel(); - /*case EViewType.Projects: - break; - case EViewType.Buildingsites: + return _createClientEditViewModel(); + case EViewType.Projects: + return _createProjektListViewModel(); + /*case EViewType.Buildingsites: break; case EViewType.SewerObjects: break; diff --git a/DaSaSo.ViewModel/ProjectListViewModel.cs b/DaSaSo.ViewModel/ProjectListViewModel.cs index c4c8412..e3205dc 100644 --- a/DaSaSo.ViewModel/ProjectListViewModel.cs +++ b/DaSaSo.ViewModel/ProjectListViewModel.cs @@ -1,5 +1,6 @@ using DaSaSo.Domain.Model; using DaSaSo.EntityFramework.Services; +using DaSaSo.ViewModel.Interface; using System; using System.Collections.Generic; using System.Collections.ObjectModel; @@ -12,15 +13,18 @@ namespace DaSaSo.ViewModel public class ProjectListViewModel : BaseViewModel { private GenericDataService genericDataService; - private Client selectedClient; - + + private IActualProject actualProject; + private IRenavigator renavigator; public ObservableCollection Projekte { get; } - public ProjectListViewModel(GenericDataService genericDataService, Client selectedClient) + + public ProjectListViewModel(GenericDataService genericDataService, IActualProject actualProject, IRenavigator renavigator) { - this.genericDataService = genericDataService; Projekte = new ObservableCollection(); - LoadProjecte(); + this.genericDataService = genericDataService; + this.actualProject = actualProject; + this.renavigator = renavigator; } public async void LoadProjecte() diff --git a/DaSaSo.ViewModel/State/Navigation/ViewModelDelegateRenavigator.cs b/DaSaSo.ViewModel/State/Navigation/ViewModelDelegateRenavigator.cs new file mode 100644 index 0000000..23dfa60 --- /dev/null +++ b/DaSaSo.ViewModel/State/Navigation/ViewModelDelegateRenavigator.cs @@ -0,0 +1,26 @@ +using DaSaSo.ViewModel.Interface; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DaSaSo.ViewModel.State.Navigation +{ + public class ViewModelDelegateRenavigator : IRenavigator where TViewModel : BaseViewModel + { + private readonly INavigator _navigator; + private readonly CreateViewModel _createViewModel; + + public ViewModelDelegateRenavigator(INavigator navigator, CreateViewModel createViewModel) + { + _navigator = navigator; + _createViewModel = createViewModel; + } + + public void Renavigate() + { + _navigator.CurrentViewModel = _createViewModel(); + } + } +} diff --git a/DaSaSo.ViewModel/State/Navigation/ViewModelFactoryRenavigator.cs b/DaSaSo.ViewModel/State/Navigation/ViewModelFactoryRenavigator.cs deleted file mode 100644 index b7c5d7b..0000000 --- a/DaSaSo.ViewModel/State/Navigation/ViewModelFactoryRenavigator.cs +++ /dev/null @@ -1,26 +0,0 @@ -using DaSaSo.ViewModel.Interface; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace DaSaSo.ViewModel.State.Navigation -{ - public class ViewModelFactoryRenavigator : IRenavigator where TViewModel : BaseViewModel - { - private readonly INavigator _navigator; - private readonly IViewModelFactory _viewModelFactory; - - public ViewModelFactoryRenavigator(INavigator navigator, IViewModelFactory viewModelFactory) - { - _navigator = navigator; - _viewModelFactory = viewModelFactory; - } - - public void Renavigate() - { - _navigator.CurrentViewModel = _viewModelFactory.CreateViewModel(); - } - } -} diff --git a/DaSaSo.Wpf/App.xaml.cs b/DaSaSo.Wpf/App.xaml.cs index e60c448..5f6f276 100644 --- a/DaSaSo.Wpf/App.xaml.cs +++ b/DaSaSo.Wpf/App.xaml.cs @@ -20,6 +20,8 @@ namespace DaSaSo.Wpf { protected override void OnStartup(StartupEventArgs e) { + Application.Current.DispatcherUnhandledException += Current_DispatcherUnhandledException; + AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; IServiceProvider serviceProvider = CreateServiceProvider(); MainWindow? window = new MainWindow() { DataContext = serviceProvider.GetRequiredService() }; @@ -27,34 +29,61 @@ namespace DaSaSo.Wpf base.OnStartup(e); } + private void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) + { + try + { + Exception ex = (Exception)e.ExceptionObject; + string text = "An application error occured. Plrease contact the Administrator with the following information:\n\n"; + MessageBox.Show(text + " " + ex.Message + "\n\n" + ex.StackTrace); + } + catch(Exception ex2) + { + MessageBox.Show("Fatal Non-UI error", ex2.Message, MessageBoxButton.OK, MessageBoxImage.Error); + } + } + + private void Current_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e) + { + throw new NotImplementedException(); + } + private IServiceProvider CreateServiceProvider() { IServiceCollection services = new ServiceCollection(); services.AddSingleton(); services.AddSingleton, ClientDataService>(); - + services.AddSingleton(); + + services.AddSingleton(); - services.AddSingleton, HomeViewModelFactory>(); - //services.AddSingleton>(); - services.AddSingleton, ClientListViewModelFactory>((services) => - new ClientListViewModelFactory( - services.GetRequiredService(), - new ViewModelFactoryRenavigator( - services.GetRequiredService(), - services.GetRequiredService>() - ) - )); - services.AddSingleton, ClientEditViewModelFactory>((services) => - new ClientEditViewModelFactory( + services.AddSingleton>(services => + { + return () => new ClientEditViewModel( + services.GetRequiredService>(), + services.GetRequiredService(), + new ViewModelDelegateRenavigator( + services.GetRequiredService(), + services.GetRequiredService>() + )); + }); + services.AddSingleton>(services => + { + return () => new HomeViewModel(); + }); + services.AddSingleton>(services => + { + return () => new ClientListViewModel( + services.GetRequiredService>(), services.GetRequiredService(), - new ViewModelFactoryRenavigator( + new ViewModelDelegateRenavigator( services.GetRequiredService(), - services.GetRequiredService>() - ) - - )); + services.GetRequiredService>() + )); + }); + //services.AddSingleton(); services.AddScoped();