Umbau auf delegate command
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
namespace DaSaSo.ViewModel
|
namespace DaSaSo.ViewModel
|
||||||
{
|
{
|
||||||
|
public delegate TViewModel CreateViewModel<TViewModel>() where TViewModel : BaseViewModel;
|
||||||
public class BaseViewModel : ObservableObject
|
public class BaseViewModel : ObservableObject
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|||||||
@@ -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<ClientEditViewModel>
|
|
||||||
{
|
|
||||||
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<Client>(new DaSaSoDbContextFactory()), _actualProject,renavigator);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -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<ClientListViewModel>
|
|
||||||
{
|
|
||||||
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<Client>(new DaSaSoDbContextFactory()),_actualProject, renavigator);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -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<HomeViewModel>
|
|
||||||
{
|
|
||||||
public HomeViewModel CreateViewModel()
|
|
||||||
{
|
|
||||||
return new HomeViewModel();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -13,15 +13,22 @@ namespace DaSaSo.ViewModel.Factories
|
|||||||
{
|
{
|
||||||
public class ViewModelAbstractFactory : IViewModelAbstractFactory
|
public class ViewModelAbstractFactory : IViewModelAbstractFactory
|
||||||
{
|
{
|
||||||
private IViewModelFactory<HomeViewModel> _homeViewModelFactory;
|
private CreateViewModel<HomeViewModel> _createHomeViewModel;
|
||||||
private IViewModelFactory<ClientListViewModel> _clientListViewModelFactory;
|
private CreateViewModel<ClientListViewModel> _createClientListViewModel;
|
||||||
private IViewModelFactory<ClientEditViewModel> _clientEditViewModelFactory;
|
private CreateViewModel<ClientEditViewModel> _createClientEditViewModel;
|
||||||
|
private CreateViewModel<ProjectListViewModel> _createProjektListViewModel;
|
||||||
|
|
||||||
public ViewModelAbstractFactory(IViewModelFactory<HomeViewModel> homeViewModelFactory, IViewModelFactory<ClientListViewModel> clientListViewModel, IViewModelFactory<ClientEditViewModel> clientEditViewModel)
|
public ViewModelAbstractFactory(
|
||||||
|
CreateViewModel<HomeViewModel> createHomeViewModel,
|
||||||
|
CreateViewModel<ClientListViewModel> createClientListViewModel/*,
|
||||||
|
CreateViewModel<ClientEditViewModel> createClientEditViewModel,
|
||||||
|
CreateViewModel<ProjectListViewModel> createProjektListViewModel*/
|
||||||
|
)
|
||||||
{
|
{
|
||||||
_homeViewModelFactory = homeViewModelFactory;
|
_createHomeViewModel = createHomeViewModel;
|
||||||
_clientListViewModelFactory = clientListViewModel;
|
_createClientListViewModel = createClientListViewModel;
|
||||||
_clientEditViewModelFactory = clientEditViewModel;
|
/*_createClientEditViewModel = createClientEditViewModel;
|
||||||
|
_createProjektListViewModel = createProjektListViewModel;*/
|
||||||
}
|
}
|
||||||
|
|
||||||
public BaseViewModel CreateViewModel(EViewType viewType)
|
public BaseViewModel CreateViewModel(EViewType viewType)
|
||||||
@@ -30,14 +37,14 @@ namespace DaSaSo.ViewModel.Factories
|
|||||||
switch (viewType)
|
switch (viewType)
|
||||||
{
|
{
|
||||||
case EViewType.Home:
|
case EViewType.Home:
|
||||||
return _homeViewModelFactory.CreateViewModel();
|
return _createHomeViewModel();
|
||||||
case EViewType.Clients:
|
case EViewType.Clients:
|
||||||
return _clientListViewModelFactory.CreateViewModel();
|
return _createClientListViewModel();
|
||||||
case EViewType.ClientEdit:
|
case EViewType.ClientEdit:
|
||||||
return _clientEditViewModelFactory.CreateViewModel();
|
return _createClientEditViewModel();
|
||||||
/*case EViewType.Projects:
|
case EViewType.Projects:
|
||||||
break;
|
return _createProjektListViewModel();
|
||||||
case EViewType.Buildingsites:
|
/*case EViewType.Buildingsites:
|
||||||
break;
|
break;
|
||||||
case EViewType.SewerObjects:
|
case EViewType.SewerObjects:
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
using DaSaSo.Domain.Model;
|
using DaSaSo.Domain.Model;
|
||||||
using DaSaSo.EntityFramework.Services;
|
using DaSaSo.EntityFramework.Services;
|
||||||
|
using DaSaSo.ViewModel.Interface;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Collections.ObjectModel;
|
using System.Collections.ObjectModel;
|
||||||
@@ -12,15 +13,18 @@ namespace DaSaSo.ViewModel
|
|||||||
public class ProjectListViewModel : BaseViewModel
|
public class ProjectListViewModel : BaseViewModel
|
||||||
{
|
{
|
||||||
private GenericDataService<Project> genericDataService;
|
private GenericDataService<Project> genericDataService;
|
||||||
private Client selectedClient;
|
|
||||||
|
|
||||||
|
private IActualProject actualProject;
|
||||||
|
private IRenavigator renavigator;
|
||||||
public ObservableCollection<Project> Projekte { get; }
|
public ObservableCollection<Project> Projekte { get; }
|
||||||
|
|
||||||
public ProjectListViewModel(GenericDataService<Project> genericDataService, Client selectedClient)
|
|
||||||
|
public ProjectListViewModel(GenericDataService<Project> genericDataService, IActualProject actualProject, IRenavigator renavigator)
|
||||||
{
|
{
|
||||||
this.genericDataService = genericDataService;
|
|
||||||
Projekte = new ObservableCollection<Project>();
|
Projekte = new ObservableCollection<Project>();
|
||||||
LoadProjecte();
|
this.genericDataService = genericDataService;
|
||||||
|
this.actualProject = actualProject;
|
||||||
|
this.renavigator = renavigator;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async void LoadProjecte()
|
public async void LoadProjecte()
|
||||||
|
|||||||
@@ -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<TViewModel> : IRenavigator where TViewModel : BaseViewModel
|
||||||
|
{
|
||||||
|
private readonly INavigator _navigator;
|
||||||
|
private readonly CreateViewModel<TViewModel> _createViewModel;
|
||||||
|
|
||||||
|
public ViewModelDelegateRenavigator(INavigator navigator, CreateViewModel<TViewModel> createViewModel)
|
||||||
|
{
|
||||||
|
_navigator = navigator;
|
||||||
|
_createViewModel = createViewModel;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Renavigate()
|
||||||
|
{
|
||||||
|
_navigator.CurrentViewModel = _createViewModel();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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<TViewModel> : IRenavigator where TViewModel : BaseViewModel
|
|
||||||
{
|
|
||||||
private readonly INavigator _navigator;
|
|
||||||
private readonly IViewModelFactory<TViewModel> _viewModelFactory;
|
|
||||||
|
|
||||||
public ViewModelFactoryRenavigator(INavigator navigator, IViewModelFactory<TViewModel> viewModelFactory)
|
|
||||||
{
|
|
||||||
_navigator = navigator;
|
|
||||||
_viewModelFactory = viewModelFactory;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Renavigate()
|
|
||||||
{
|
|
||||||
_navigator.CurrentViewModel = _viewModelFactory.CreateViewModel();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -20,6 +20,8 @@ namespace DaSaSo.Wpf
|
|||||||
{
|
{
|
||||||
protected override void OnStartup(StartupEventArgs e)
|
protected override void OnStartup(StartupEventArgs e)
|
||||||
{
|
{
|
||||||
|
Application.Current.DispatcherUnhandledException += Current_DispatcherUnhandledException;
|
||||||
|
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
|
||||||
IServiceProvider serviceProvider = CreateServiceProvider();
|
IServiceProvider serviceProvider = CreateServiceProvider();
|
||||||
|
|
||||||
MainWindow? window = new MainWindow() { DataContext = serviceProvider.GetRequiredService<MainWindowViewModel>() };
|
MainWindow? window = new MainWindow() { DataContext = serviceProvider.GetRequiredService<MainWindowViewModel>() };
|
||||||
@@ -27,34 +29,61 @@ namespace DaSaSo.Wpf
|
|||||||
base.OnStartup(e);
|
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()
|
private IServiceProvider CreateServiceProvider()
|
||||||
{
|
{
|
||||||
IServiceCollection services = new ServiceCollection();
|
IServiceCollection services = new ServiceCollection();
|
||||||
|
|
||||||
services.AddSingleton<DaSaSoDbContextFactory>();
|
services.AddSingleton<DaSaSoDbContextFactory>();
|
||||||
services.AddSingleton<IDataService<Client>, ClientDataService>();
|
services.AddSingleton<IDataService<Client>, ClientDataService>();
|
||||||
|
services.AddSingleton<ClientListViewModel>();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
services.AddSingleton<IViewModelAbstractFactory, ViewModelAbstractFactory>();
|
services.AddSingleton<IViewModelAbstractFactory, ViewModelAbstractFactory>();
|
||||||
services.AddSingleton<IViewModelFactory<HomeViewModel>, HomeViewModelFactory>();
|
services.AddSingleton<CreateViewModel<ClientEditViewModel>>(services =>
|
||||||
//services.AddSingleton<IRenavigator, ViewModelFactoryRenavigator<ClientEditViewModel>>();
|
{
|
||||||
services.AddSingleton<IViewModelFactory<ClientListViewModel>, ClientListViewModelFactory>((services) =>
|
return () => new ClientEditViewModel(
|
||||||
new ClientListViewModelFactory(
|
services.GetRequiredService<IDataService<Client>>(),
|
||||||
services.GetRequiredService<IActualProject>(),
|
services.GetRequiredService<IActualProject>(),
|
||||||
new ViewModelFactoryRenavigator<ClientEditViewModel>(
|
new ViewModelDelegateRenavigator<HomeViewModel>(
|
||||||
services.GetRequiredService<INavigator>(),
|
services.GetRequiredService<INavigator>(),
|
||||||
services.GetRequiredService<IViewModelFactory<ClientEditViewModel>>()
|
services.GetRequiredService<CreateViewModel<HomeViewModel>>()
|
||||||
)
|
));
|
||||||
));
|
});
|
||||||
services.AddSingleton<IViewModelFactory<ClientEditViewModel>, ClientEditViewModelFactory>((services) =>
|
services.AddSingleton<CreateViewModel<HomeViewModel>>(services =>
|
||||||
new ClientEditViewModelFactory(
|
{
|
||||||
|
return () => new HomeViewModel();
|
||||||
|
});
|
||||||
|
services.AddSingleton<CreateViewModel<ClientListViewModel>>(services =>
|
||||||
|
{
|
||||||
|
return () => new ClientListViewModel(
|
||||||
|
services.GetRequiredService<IDataService<Client>>(),
|
||||||
services.GetRequiredService<IActualProject>(),
|
services.GetRequiredService<IActualProject>(),
|
||||||
new ViewModelFactoryRenavigator<HomeViewModel>(
|
new ViewModelDelegateRenavigator<ClientEditViewModel>(
|
||||||
services.GetRequiredService<INavigator>(),
|
services.GetRequiredService<INavigator>(),
|
||||||
services.GetRequiredService<IViewModelFactory<HomeViewModel>>()
|
services.GetRequiredService<CreateViewModel<ClientEditViewModel>>()
|
||||||
)
|
));
|
||||||
|
});
|
||||||
|
|
||||||
));
|
|
||||||
|
|
||||||
//services.AddSingleton<INavigator, Navigator>();
|
//services.AddSingleton<INavigator, Navigator>();
|
||||||
services.AddScoped<IActualProject, ActualProject>();
|
services.AddScoped<IActualProject, ActualProject>();
|
||||||
|
|||||||
Reference in New Issue
Block a user