Leitungen können nun bearbeitet werden

This commit is contained in:
HuskyTeufel
2021-09-28 10:46:16 +02:00
parent d9f34cbf90
commit e8674fed2c
43 changed files with 790 additions and 93 deletions

View File

@@ -10,6 +10,8 @@ using DaSaSo.ViewModel.Factories;
using DaSaSo.ViewModel.Interface;
using DaSaSo.ViewModel.State.ActualState;
using DaSaSo.ViewModel.State.Navigation;
using DaSaSo.Wpf.HostBuilders;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
@@ -32,6 +34,14 @@ namespace DaSaSo.Wpf
public static IHostBuilder CreateHostBuilder(string[]? args = null)
{
return Host.CreateDefaultBuilder(args)
.AddConfiguration()
.AddServices()
.AddViewModels()
.AddStores()
.AddDBContext();
}
/* return Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration(c=>
{
c.AddJsonFile("appsettings.json");
@@ -41,7 +51,8 @@ namespace DaSaSo.Wpf
{
string connectionString = context.Configuration.GetConnectionString("default");
services.AddDbContext<DaSaSoDbContext>(o => o.UseSqlServer(connectionString));
services.AddSingleton<DaSaSoDbContextFactory>(new DaSaSoDbContextFactory(connectionString));
services.AddSingleton<IDataService<Client>, ClientDataService>();
@@ -72,7 +83,6 @@ namespace DaSaSo.Wpf
services.AddSingleton<CreateViewModel<SewerStammdatenViewModel>>(services =>
{
return () => new SewerStammdatenViewModel(
services.GetRequiredService<IDataService<SewerObject>>(),
services.GetRequiredService<IActualProject>()
);
});
@@ -93,9 +103,14 @@ namespace DaSaSo.Wpf
services.AddSingleton<CreateViewModel<SewerMainListViewModel>>(services =>
{
return () => new SewerMainListViewModel(
services.GetRequiredService<IDataService<SewerObject>>(),
services.GetRequiredService<ISewerMainNavigator>(),
services.GetRequiredService<IActualProject>(),
services.GetRequiredService<IViewModelSewerMainFactory>()
services.GetRequiredService<IViewModelSewerMainFactory>(),
new ViewModelDelegateRenavigator(
services.GetRequiredService<IMainWindowNavigator>()
),
services.GetRequiredService<ISewerObjectService>()
);
});
services.AddSingleton<CreateViewModel<ProjectListViewModel>>(services =>
@@ -138,14 +153,19 @@ namespace DaSaSo.Wpf
services.AddScoped<MainWindowViewModel>();
});
}
*/
protected override void OnStartup(StartupEventArgs e)
{
Application.Current.DispatcherUnhandledException += Current_DispatcherUnhandledException;
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
_host.Start();
DaSaSoDbContextFactory contextFactory = _host.Services.GetRequiredService<DaSaSoDbContextFactory>();
using (DaSaSoDbContext context = contextFactory.CreateDbContext())
{
context.Database.Migrate();
}
MainWindow? window = new MainWindow() { DataContext = _host.Services.GetRequiredService<MainWindowViewModel>() };
window.Show();

View File

@@ -10,9 +10,10 @@
xmlns:converters="clr-namespace:DaSaSo.Wpf.Converters"
d:DataContext="{d:DesignInstance Type=viewmodel:MainWindowViewModel}"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
d:DesignHeight="300" d:DesignWidth="200">
<UserControl.Resources>
<converters:EqualValueToParameterConverter x:Key="EqualValueToParameterConverter" />
<converters:EqualValueToBooleanConverter x:Key="EqualValueToBooleanConverter" />
</UserControl.Resources>
<Grid>
<Grid.RowDefinitions>
@@ -25,5 +26,9 @@
<RadioButton Grid.Row="1" IsChecked="{Binding CurrentViewModel, Mode=OneWay, Converter={StaticResource EqualValueToParameterConverter}, ConverterParameter={x:Type viewmodel:ProjectListViewModel}}" Content="Projekte" Style="{StaticResource ToggleButtonList}" Command="{Binding UpdateCurrentViewModelCommand}" IsEnabled="{Binding CanSelectProject}" CommandParameter="{x:Static nav:EMainWindowViewType.Projects}" />
<RadioButton Grid.Row="2" IsChecked="{Binding CurrentViewModel, Mode=OneWay, Converter={StaticResource EqualValueToParameterConverter}, ConverterParameter={x:Type viewmodel:BuildingsiteListViewModel}}" Content="Baustellen" Style="{StaticResource ToggleButtonList}" Command="{Binding UpdateCurrentViewModelCommand}" IsEnabled="{Binding CanSelectBuildingSite}" CommandParameter="{x:Static nav:EMainWindowViewType.Buildingsites}" />
<RadioButton Grid.Row="3" IsChecked="{Binding CurrentViewModel, Mode=OneWay, Converter={StaticResource EqualValueToParameterConverter}, ConverterParameter={x:Type viewmodel:SewerObjectListViewModel}}" Content="Objekten" Style="{StaticResource ToggleButtonList}" Command="{Binding UpdateCurrentViewModelCommand}" IsEnabled="{Binding CanSelectSewerObjects}" CommandParameter="{x:Static nav:EMainWindowViewType.SewerObjects}" />
<Border Grid.RowSpan="4" Background="LightBlue" Visibility="{Binding CurrentViewModel, Mode=OneWay, Converter={StaticResource EqualValueToBooleanConverter}, ConverterParameter={x:Type viewmodel:SewerMainListViewModel}}" d:Visibility="Hidden">
<TextBlock Foreground="WhiteSmoke" FontSize="18" Text="Editing Sewer" />
</Border>
</Grid>
</UserControl>

View File

@@ -0,0 +1,27 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Data;
namespace DaSaSo.Wpf.Converters
{
public class EqualValueToBooleanConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if(value.ToString() == "DaSaSo.ViewModel.SewerMainListViewModel")
return Visibility.Visible;
return Visibility.Hidden;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
}

View File

@@ -0,0 +1,23 @@
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DaSaSo.Wpf.HostBuilders
{
public static class AddConfigurationHostBuilderExtensions
{
public static IHostBuilder AddConfiguration(this IHostBuilder host)
{
host.ConfigureAppConfiguration(c =>
{
c.AddJsonFile("appsettings.json");
c.AddEnvironmentVariables();
});
return host;
}
}
}

View File

@@ -0,0 +1,41 @@
using DaSaSo.EntityFramework;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DaSaSo.Wpf.HostBuilders
{
public static class AddDbContextHostBuilderExtensions
{
public static IHostBuilder AddDBContext(this IHostBuilder host)
{
host.ConfigureServices((context,services) =>
{
string connectionString = "";
Action<DbContextOptionsBuilder> configureDbContext = null;
string databaseToUse = context.Configuration.GetConnectionString("databaseToUse");
if(databaseToUse.Equals("default"))
{
connectionString = context.Configuration.GetConnectionString("default");
configureDbContext = o => o.UseNpgsql(connectionString);
}
else if(databaseToUse.Equals("sqlite"))
{
connectionString = context.Configuration.GetConnectionString("sqlite");
configureDbContext = o => o.UseSqlite(connectionString);
}
services.AddDbContext<DaSaSoDbContext>(configureDbContext);
services.AddSingleton<DaSaSoDbContextFactory>(new DaSaSoDbContextFactory(configureDbContext));
});
return host;
}
}
}

View File

@@ -0,0 +1,37 @@
using DaSaSo.Domain.Model;
using DaSaSo.Domain.Services;
using DaSaSo.Domain.Services.BuildingsiteServices;
using DaSaSo.Domain.Services.ProjectServices;
using DaSaSo.Domain.Services.SewerObjectService;
using DaSaSo.Domain.Services.SewerPointServices;
using DaSaSo.EntityFramework.Services;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DaSaSo.Wpf.HostBuilders
{
public static class AddServicesHostBuilderExtensions
{
public static IHostBuilder AddServices(this IHostBuilder host)
{
host.ConfigureServices(services =>
{
services.AddSingleton<IDataService<Client>, ClientDataService>();
services.AddSingleton<IDataService<Project>, ProjectDataService>();
services.AddSingleton<IDataService<Buildingsite>, BuildingsiteDataService>();
services.AddSingleton<IDataService<SewerObject>, SewerObjectDataService>();
services.AddSingleton<IDataService<SewerPoint>, SewerpointDataService>();
services.AddSingleton<IProjectService, ProjectService>();
services.AddSingleton<IBuildingsiteService, BuildingsiteService>();
services.AddSingleton<ISewerObjectService, SewerObjectService>();
services.AddSingleton<ISewerpointService, SewerpointService>();
});
return host;
}
}
}

View File

@@ -0,0 +1,27 @@
using DaSaSo.ViewModel.Interface;
using DaSaSo.ViewModel.State.ActualState;
using DaSaSo.ViewModel.State.Navigation;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DaSaSo.Wpf.HostBuilders
{
public static class AddStoresHostBuilderExtensions
{
public static IHostBuilder AddStores(this IHostBuilder host)
{
host.ConfigureServices(services =>
{
services.AddSingleton<IActualProject, ActualProject>();
services.AddSingleton<IMainWindowNavigator, MainWindowNavigator>();
services.AddSingleton<ISewerMainNavigator, SewerMainNavigator>();
});
return host;
}
}
}

View File

@@ -0,0 +1,121 @@
using DaSaSo.Domain.Model;
using DaSaSo.Domain.Services;
using DaSaSo.Domain.Services.BuildingsiteServices;
using DaSaSo.Domain.Services.ProjectServices;
using DaSaSo.Domain.Services.SewerObjectService;
using DaSaSo.Domain.Services.SewerPointServices;
using DaSaSo.ViewModel;
using DaSaSo.ViewModel.Factories;
using DaSaSo.ViewModel.Interface;
using DaSaSo.ViewModel.State.Navigation;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DaSaSo.Wpf.HostBuilders
{
public static class AddViewModelsHostBuilderExtensions
{
public static IHostBuilder AddViewModels(this IHostBuilder host)
{
host.ConfigureServices(services =>
{
services.AddTransient<MainWindowViewModel>();
services.AddSingleton<ClientListViewModel>();
services.AddSingleton<CreateViewModel<HomeViewModel>>(services =>
{
return () => new HomeViewModel();
});
services.AddSingleton<CreateViewModel<ClientEditViewModel>>(services =>
{
return () => new ClientEditViewModel(
services.GetRequiredService<IDataService<Client>>(),
services.GetRequiredService<IActualProject>(),
new ViewModelDelegateRenavigator(
services.GetRequiredService<IMainWindowNavigator>()
));
});
services.AddSingleton<CreateViewModel<HomeViewModel>>(services =>
{
return () => new HomeViewModel();
});
services.AddTransient<CreateViewModel<SewerStammdatenViewModel>>(services =>
{
return () => new SewerStammdatenViewModel(
services.GetRequiredService<IActualProject>()
);
});
services.AddSingleton<CreateViewModel<SewerDamageListViewModel>>(services =>
{
return () => new SewerDamageListViewModel();
});
services.AddSingleton<CreateViewModel<ClientListViewModel>>(services =>
{
return () => new ClientListViewModel(
services.GetRequiredService<IDataService<Client>>(),
services.GetRequiredService<IActualProject>(),
new ViewModelDelegateRenavigator(
services.GetRequiredService<IMainWindowNavigator>()
));
});
services.AddSingleton<CreateViewModel<SewerMainListViewModel>>(services =>
{
return () => new SewerMainListViewModel(
services.GetRequiredService<IDataService<SewerObject>>(),
services.GetRequiredService<ISewerMainNavigator>(),
services.GetRequiredService<IActualProject>(),
services.GetRequiredService<IViewModelSewerMainFactory>(),
new ViewModelDelegateRenavigator(
services.GetRequiredService<IMainWindowNavigator>()
),
services.GetRequiredService<ISewerObjectService>(),
services.GetRequiredService<ISewerpointService>()
);
});
services.AddSingleton<CreateViewModel<ProjectListViewModel>>(services =>
{
return () => new ProjectListViewModel(
services.GetRequiredService<IDataService<Project>>(),
services.GetRequiredService<IActualProject>(),
new ViewModelDelegateRenavigator(
services.GetRequiredService<IMainWindowNavigator>()),
services.GetRequiredService<IProjectService>()
);
});
services.AddSingleton<CreateViewModel<BuildingsiteListViewModel>>(services =>
{
return () => new BuildingsiteListViewModel(
services.GetRequiredService<IDataService<Buildingsite>>(),
services.GetRequiredService<IActualProject>(),
new ViewModelDelegateRenavigator(
services.GetRequiredService<IMainWindowNavigator>()),
services.GetRequiredService<IBuildingsiteService>()
);
});
services.AddSingleton<CreateViewModel<SewerObjectListViewModel>>(services =>
{
return () => new SewerObjectListViewModel(
services.GetRequiredService<IDataService<SewerObject>>(),
services.GetRequiredService<IActualProject>(),
services.GetRequiredService<ISewerObjectService>()
);
});
services.AddSingleton<IViewModelAbstractFactory, MainWindowViewModelFactory>();
services.AddSingleton<IViewModelSewerMainFactory, SewerWindowViewModelFactory>();
});
return host;
}
}
}

View File

@@ -1,15 +0,0 @@
using DaSaSo.ViewModel.Interface;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
namespace DaSaSo.Wpf.Service
{
class WindowService
{
}
}

View File

@@ -8,7 +8,7 @@
d:DesignHeight="450" d:DesignWidth="800">
<Grid>
<StackPanel>
<DataGrid ItemsSource="{Binding Buildingsites}" SelectedItem="{Binding SelectedBuildingsite}" />
<DataGrid ItemsSource="{Binding Buildingsites}" SelectedItem="{Binding SelectedBuildingsite}" IsReadOnly="True" />
<Button Content="Selektiere" Command="{Binding SelectCommand}" />
<Button Content="Hinzufügen" Command="{Binding AddCommand}" />
<Button Content="Bearbeiten" Command="{Binding EditCommand}" />

View File

@@ -12,6 +12,7 @@
<DataTemplate DataType="{x:Type viewmodel:SewerStammdatenViewModel}">
<views:SewerStammdatenView />
</DataTemplate>
<BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" />
</UserControl.Resources>
<Grid>
<Grid.ColumnDefinitions>
@@ -24,8 +25,15 @@
</Grid.RowDefinitions>
<Controls:SewerObjectNavigationBar Grid.Column="0" />
<ContentControl Grid.Column="1" Content="{Binding CurrentSewerViewModel}" />
<StatusBar Grid.Row="1" Grid.ColumnSpan="2">
<StatusBarItem Content="Dada" />
</StatusBar>
<StackPanel Grid.Row="1" Grid.ColumnSpan="2">
<Button Content="Speichern und Schließen" Command="{Binding SaveCommand}" />
<StatusBar Grid.Row="1" Grid.ColumnSpan="2">
<StatusBarItem Content="Dada" />
</StatusBar>
</StackPanel>
<Border Grid.RowSpan="2" Grid.ColumnSpan="2" Background="Gray" d:Visibility="Hidden" Visibility="{Binding IsLoading, Converter={StaticResource BooleanToVisibilityConverter}}">
<TextBlock Foreground="White" FontSize="50" Text="Loading" />
</Border>
</Grid>
</UserControl>

View File

@@ -12,7 +12,7 @@
xmlns:View="clr-namespace:DaSaSo.Wpf.View"
xmlns:local="clr-namespace:DaSaSo.Wpf" xmlns:viewmodel="clr-namespace:DaSaSo.ViewModel;assembly=DaSaSo.ViewModel" d:DataContext="{d:DesignInstance Type=viewmodel:MainWindowViewModel}"
mc:Ignorable="d"
Title="Cosysda Sanierungs Software" Height="450" Width="800" WindowState="Maximized" FontSize="20">
Title="{Binding ApplicationTitle}" Height="450" Width="800" WindowState="Maximized" FontSize="20">
<Window.Resources>
<DataTemplate DataType="{x:Type viewmodel:ClientListViewModel}">
<ClientViews:ClientListView />
@@ -49,14 +49,14 @@
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition Height="20" />
<RowDefinition Height="40" />
</Grid.RowDefinitions>
<controls:MainWindowNavigationBar Grid.Column="0" Grid.Row="0"/>
<ContentControl Grid.Column="1" Grid.Row="0" Content="{Binding CurrentViewModel}" />
<StatusBar Grid.Row="1" Grid.ColumnSpan="2">
<StatusBarItem Content="{Binding ClientName}" />
<StatusBarItem Content="{Binding Projektname}" />
<StatusBarItem Content="{Binding Buildingsitename}" />
<StatusBar FontSize="20" Grid.Row="1" Grid.ColumnSpan="2">
<StatusBarItem FontSize="20" Content="{Binding ClientName}" />
<StatusBarItem FontSize="20" Content="{Binding Projektname}" />
<StatusBarItem FontSize="20" Content="{Binding Buildingsitename}" />
</StatusBar>
</Grid>
</Window>

View File

@@ -1,5 +1,7 @@
{
"ConnectionStrings": {
"default": "Host = localhost; Database = dasaso; Username = kansan; Password = kansan"
"databaseToUse": "sqlite",
"default": "Host = localhost; Database = dasaso; Username = kansan; Password = kansan",
"sqlite": "Data Source=database.db"
}
}