Code development platform for open source projects from the European Union institutions :large_blue_circle: EU Login authentication by SMS has been phased out. To see alternatives please check here

Skip to content
Snippets Groups Projects
Commit 2b13d300 authored by Harald Martini's avatar Harald Martini
Browse files

started splitting viewmodel bindings into different resource dictionaries,

added different completed bus view models
parent 7b30fa01
No related branches found
No related tags found
No related merge requests found
Showing
with 532 additions and 169 deletions
......@@ -8,7 +8,8 @@
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<!-- Add new ResourceDictionaries here-->
<ResourceDictionary Source="Resources/ViewModelBindings.xaml"/>
<ResourceDictionary Source="/Resources/ViewModelBindings/ViewModelBindings.xaml"/>
<ResourceDictionary Source="/Resources/ViewModelBindings/VehicleViewModelBinding.xaml"/>
<ResourceDictionary Source="Resources/Converter.xaml"/>
<ResourceDictionary Source="Resources/MultistageParameterDataTemplates.xaml"/>
<ResourceDictionary Source="Resources\Styles\ButtonStyles.xaml"/>
......
......@@ -29,7 +29,7 @@ namespace VECTO3GUI2020.Helper.TemplateSelector
Type type = null;
switch (vm) {
case InterimStageBusVehicleViewModel_v2_8 declvm:
case InterimStageBusVehicleViewModel declvm:
if (declvm.ExemptedVehicle) {
type = typeof(VehicleView_v2_8_exempted);
} else {
......
......@@ -21,6 +21,8 @@ namespace VECTO3GUI2020.Ninject.Factories
{
IComponentViewModel CreateComponentViewModel(DataSource source, object inputData);
ICommonComponentViewModel CreateCommonComponentViewModel(object inputData);
}
......
......@@ -30,11 +30,11 @@ namespace VECTO3GUI2020.Ninject.Factories
public override void Load()
{
Bind<IDocumentViewModelFactory>().To<DocumentViewModelFactory>().Named(DocumentViewModelFactoryScope);
Bind<IDocumentViewModelFactory>().To<DocumentViewModelFactory>().InSingletonScope().Named(DocumentViewModelFactoryScope);
#region MultistepViewModel
Bind<IMultiStepInputViewModelFactory>().ToFactory().Named(MultistepInputScope);
Bind<IMultiStepInputViewModelFactory>().ToFactory().InSingletonScope().Named(MultistepInputScope);
Bind<IDocumentViewModel>().To<MultiStageJobViewModel_v0_1>().WhenParentNamed(MultistepInputScope);
#endregion
......
......@@ -22,8 +22,9 @@ namespace VECTO3GUI2020.Ninject.Factories
LoadModule<DocumentViewModelFactoryModule>();
LoadModule<ComponentViewModelFactoryModule>();
LoadModule<VehicleViewModelFactoryModule>();
LoadModule<XMLWriterFactoryModule>();
Bind<IXMLWriterFactory>().ToFactory(() => new UseFirstArgumentTypeAsNameInstanceProvider(fallback: true));
//Bind<IXMLWriterFactory>().ToFactory(() => new UseFirstArgumentTypeAsNameInstanceProvider(fallback: true));
//Bind<IMultiStageViewModelFactory>().ToFactory(() => new UseFirstArgumentAsNameInstanceProvider(skipFirstArgument: true, fallback: true));
Bind<IJobEditViewModelFactory>().ToFactory(() => new UseFirstArgumentTypeAsNameInstanceProvider());
......
using Ninject;
using TUGraz.VectoCommon.Exceptions;
using TUGraz.VectoCommon.InputData;
using TUGraz.VectoCore.InputData.FileIO.XML;
using TUGraz.VectoCore.InputData.FileIO.XML.Declaration;
......@@ -27,6 +28,7 @@ namespace VECTO3GUI2020.Ninject.Factories
private readonly IDocumentViewModelFactory _documentViewModelFactory;
private readonly IVehicleViewModelFactory _vehicleViewModelFactory;
private readonly IComponentViewModelFactory _componentViewModelFactory;
public MultiStageViewModelFactory(
IMultiStageViewModelFactoryDefaultInstanceProvider multiStageVmFactoryDefaultInstanceProvider,
......@@ -54,9 +56,13 @@ namespace VECTO3GUI2020.Ninject.Factories
return _documentViewModelFactory.CreateDocumentViewModel(inputData) as IMultiStageJobViewModel;
}
public IVehicleViewModel GetInterimStageVehicleViewModel()
public IMultistageVehicleViewModel GetInterimStageVehicleViewModel(StageInputViewModel.CompletedBusArchitecture arch)
{
return _multiStageVmFactoryDefaultInstanceProvider.GetInterimStageVehicleViewModel();
if (_vehicleViewModelFactory.CreateNewVehicleViewModel(arch) is IMultistageVehicleViewModel veh) {
return veh;
};
throw new VectoException($"Could not create viewmodel for {arch} completed bus!");
}
public IVehicleViewModel GetInterimStageVehicleViewModel(IVehicleDeclarationInputData consolidatedVehicleData, bool exempted)
......
......@@ -22,7 +22,7 @@ namespace VECTO3GUI2020.Ninject.Factories
// Bind<IMultiStageJobViewModel>().To<MultiStageJobViewModel_v0_1>().
// NamedLikeFactoryMethod((IMultiStageViewModelFactory f) => f.GetMultiStageJobViewModel(null));
// Bind<IVehicleViewModel>().To<InterimStageBusVehicleViewModel_v2_8>().
// Bind<IVehicleViewModel>().To<InterimStageBusVehicleViewModel>().
// NamedLikeFactoryMethod((IMultiStageViewModelFactory f)=>f.GetInterimStageVehicleViewModel());
// Bind<IManufacturingStageViewModel>().To<ManufacturingStageViewModel_v0_1>().
......
......@@ -25,6 +25,8 @@ namespace VECTO3GUI2020.Ninject.Factories
/// <param name="exempted"></param>
/// <returns></returns>
IVehicleViewModel CreateVehicleViewModel(IVehicleDeclarationInputData consolidatedVehicleData, IVehicleDeclarationInputData vehicleInput);
IVehicleViewModel CreateNewVehicleViewModel(StageInputViewModel.CompletedBusArchitecture arch);
}
public class VehicleViewModelFactoryModule : AbstractNinjectModule
......@@ -39,10 +41,12 @@ namespace VECTO3GUI2020.Ninject.Factories
new CombineArgumentsToNameInstanceProvider.MethodSettings() {
combineToNameDelegate = (args) => {
if (args.Length >= 2) {
//Step inputviewmodel with consolidate vehicle data from previous steps
if (args[0] is IVehicleDeclarationInputData consolidatedVehicle) {
return DefaultName(consolidatedVehicle.ExemptedVehicle);
return ArchName(consolidatedVehicle.VehicleType, consolidatedVehicle.ExemptedVehicle).ToString();
}
//Standalone step input
if (args[1] is IVehicleDeclarationInputData vehicle) {
return CombineToName(vehicle.DataSource.TypeVersion, vehicle.DataSource.Type);
}
......@@ -53,20 +57,40 @@ namespace VECTO3GUI2020.Ninject.Factories
takeArguments = 2,
skipArguments = 0,
},
new CombineArgumentsToNameInstanceProvider.MethodSettings() {
methods = new[]{typeof(IVehicleViewModelFactory).GetMethod(nameof(IVehicleViewModelFactory.CreateNewVehicleViewModel))},
combineToNameDelegate = (args) => {
if (args.Length >= 1 && args[0] is StageInputViewModel.CompletedBusArchitecture arch) {
return arch.ToString();
}
throw new ArgumentException($"arg[0] must be {nameof(StageInputViewModel.CompletedBusArchitecture)}");
},
skipArguments = 1,
takeArguments = 1
}
})).Named(scopeName);
///Empty vehicle view models
AddVehicleViewModelBinding<InterimStageBusVehicleViewModel_v2_8>(false);
AddVehicleViewModelBinding<InterimStageBusVehicleViewModel_v2_8>(true);
///Empty vehicle view models //Create depending on jobtype
AddVehicleViewModelBinding<InterimStageConventionalBusVehicleViewModel>(VectoSimulationJobType.ConventionalVehicle);
//One for hev is enough map to same name
AddVehicleViewModelBinding<InterimStageHevBusVehicleViewModel>( VectoSimulationJobType.ParallelHybridVehicle);
AddVehicleViewModelBinding<InterimStagePevBusVehicleViewModel>( VectoSimulationJobType.BatteryElectricVehicle);
AddVehicleViewModelBinding<InterimStageIEPCBusVehicleViewModel>(VectoSimulationJobType.IEPC_E);
AddVehicleViewModelBinding<InterimStageExemptedBusVehicleViewModel>(VectoSimulationJobType.EngineOnlySimulation, true);
///Vehicle Viewmodels for existing files
AddVehicleViewModelBinding<InterimStageBusVehicleViewModel_v2_8>(XMLDeclarationConventionalCompletedBusDataProviderV24.NAMESPACE_URI, XMLDeclarationConventionalCompletedBusDataProviderV24.XSD_TYPE);
AddVehicleViewModelBinding<InterimStageBusVehicleViewModel_v2_8>(XMLDeclarationHevCompletedBusDataProviderV24.NAMESPACE_URI, XMLDeclarationHevCompletedBusDataProviderV24.XSD_TYPE);
AddVehicleViewModelBinding<InterimStageConventionalBusVehicleViewModel>(XMLDeclarationConventionalCompletedBusDataProviderV24.NAMESPACE_URI, XMLDeclarationConventionalCompletedBusDataProviderV24.XSD_TYPE);
AddVehicleViewModelBinding<InterimStageHevBusVehicleViewModel>(XMLDeclarationHevCompletedBusDataProviderV24.NAMESPACE_URI, XMLDeclarationHevCompletedBusDataProviderV24.XSD_TYPE);
AddVehicleViewModelBinding<InterimStageBusVehicleViewModel_v2_8>(XMLDeclarationPEVCompletedBusDataProviderV24.NAMESPACE_URI, XMLDeclarationPEVCompletedBusDataProviderV24.XSD_TYPE);
AddVehicleViewModelBinding<InterimStageBusVehicleViewModel_v2_8>(XMLDeclarationIepcCompletedBusDataProviderV24.NAMESPACE_URI, XMLDeclarationIepcCompletedBusDataProviderV24.XSD_TYPE);
AddVehicleViewModelBinding<InterimStagePevBusVehicleViewModel>(XMLDeclarationPEVCompletedBusDataProviderV24.NAMESPACE_URI, XMLDeclarationPEVCompletedBusDataProviderV24.XSD_TYPE);
AddVehicleViewModelBinding<InterimStageIEPCBusVehicleViewModel>(XMLDeclarationIepcCompletedBusDataProviderV24.NAMESPACE_URI, XMLDeclarationIepcCompletedBusDataProviderV24.XSD_TYPE);
AddVehicleViewModelBinding<InterimStageBusVehicleViewModel_v2_8>(XMLDeclarationExemptedCompletedBusDataProviderV24.NAMESPACE_URI, XMLDeclarationExemptedCompletedBusDataProviderV24.XSD_TYPE);
AddVehicleViewModelBinding<InterimStageExemptedBusVehicleViewModel>(XMLDeclarationExemptedCompletedBusDataProviderV24.NAMESPACE_URI, XMLDeclarationExemptedCompletedBusDataProviderV24.XSD_TYPE);
}
......@@ -76,15 +100,32 @@ namespace VECTO3GUI2020.Ninject.Factories
Bind<IVehicleViewModel>().To<TConcrete>().WhenAnyAncestorNamed(scopeName).Named(CombineToName(ns, type));
}
private void AddVehicleViewModelBinding<TConcrete>(bool exempted) where TConcrete : IVehicleViewModel
private void AddVehicleViewModelBinding<TConcrete>(VectoSimulationJobType jobType, bool exempted = false) where TConcrete : IVehicleViewModel
{
Bind<IVehicleViewModel>().To<TConcrete>().WhenAnyAncestorNamed(scopeName).Named(DefaultName(exempted));
Bind<IVehicleViewModel>().To<TConcrete>().WhenAnyAncestorNamed(scopeName).Named(ArchName(jobType, exempted).ToString());
}
public static string DefaultName(bool exempted)
public static StageInputViewModel.CompletedBusArchitecture ArchName(VectoSimulationJobType jobType, bool exempted = false)
{
return exempted ? "exempted" : "default";
if (exempted) {
return StageInputViewModel.CompletedBusArchitecture.Exempted;
}
switch(jobType){
case VectoSimulationJobType.ConventionalVehicle:
return StageInputViewModel.CompletedBusArchitecture.Conventional;
case VectoSimulationJobType.ParallelHybridVehicle:
case VectoSimulationJobType.SerialHybridVehicle:
case VectoSimulationJobType.IHPC:
return StageInputViewModel.CompletedBusArchitecture.HEV;
case VectoSimulationJobType.BatteryElectricVehicle:
return StageInputViewModel.CompletedBusArchitecture.PEV;
case VectoSimulationJobType.IEPC_E:
case VectoSimulationJobType.IEPC_S:
return StageInputViewModel.CompletedBusArchitecture.IEPC;
default:
throw new ArgumentOutOfRangeException(nameof(jobType), jobType, null);
}
}
public static string CombineToName(XNamespace ns, string type)
{
......
using System;
using System.Xml.Linq;
using Ninject.Extensions.Factory;
using Ninject.Modules;
using TUGraz.VectoCommon.InputData;
using TUGraz.VectoCore.Utils;
using TUGraz.VectoCore.Utils.Ninject;
using VECTO3GUI2020.Ninject.Util;
using VECTO3GUI2020.Util.XML.Implementation;
using VECTO3GUI2020.Util.XML.Implementation.ComponentWriter;
......@@ -11,97 +15,124 @@ namespace VECTO3GUI2020.Ninject.Factories
{
public class XMLWriterFactoryModule : NinjectModule
{
private const string scope = nameof(IXMLWriterFactoryInternal);
public override void Load()
{
Bind<IXMLWriterFactory>().To<XMLWriterFactory>();
Bind<IXMLWriterFactoryInternal>().ToFactory(() => new CombineArgumentsToNameInstanceProvider(false, new [] {
new CombineArgumentsToNameInstanceProvider.MethodSettings() {
combineToNameDelegate = ((args) => {
if (args[0] is DataSource dataSource) {
return GetName(dataSource.TypeVersion, dataSource.Type);
}
throw new ArgumentException();
}),
methods = new []{typeof(IXMLWriterFactoryInternal).GetMethod(nameof(IXMLWriterFactoryInternal.CreateWriter))},
skipArguments = 1,
takeArguments = 1,
}
})).Named(scope);
//Array.ForEach(
// XMLVehicleWriter_v2_10.SUPPORTEDVERSIONS,
// sv =>
// Bind<IXMLVehicleWriter>().To<XMLVehicleWriter_v2_10>().Named(sv));
Array.ForEach(XMLVehicleWriter_v2_10.SUPPORTEDVERSIONS,
sv => Bind<IXMLVehicleWriter>().To<XMLVehicleWriter_v2_10>().WhenParentNamed(scope).Named(GetName(sv.version, sv.type)));
Array.ForEach(
XMLDeclarationJobWriter_v1_0.SUPPORTED_VERSIONS,
sv =>
Bind<IXMLDeclarationJobWriter>().To<XMLDeclarationJobWriter_v1_0>().Named(sv));
#region
Array.ForEach(
XMLDeclarationJobWriter_v2_0.SUPPORTED_VERSIONS,
sv =>
Bind<IXMLDeclarationJobWriter>().To<XMLDeclarationJobWriter_v2_0>().Named(sv));
//Array.ForEach(
// XMLDeclarationJobWriter_v1_0.SUPPORTED_VERSIONS,
// sv =>
// Bind<IXMLDeclarationJobWriter>().To<XMLDeclarationJobWriter_v1_0>().Named(sv));
Array.ForEach(
XMLPTOWriter_v1_0.SUPPORTED_VERSIONS,
sv => Bind<IXMLComponentWriter>().To<XMLPTOWriter_v1_0>().Named(sv));
//Array.ForEach(
// XMLDeclarationJobWriter_v2_0.SUPPORTED_VERSIONS,
// sv =>
// Bind<IXMLDeclarationJobWriter>().To<XMLDeclarationJobWriter_v2_0>().Named(sv));
Array.ForEach(
XMLPTOWriter_v2_0.SUPPORTED_VERSIONS,
sv => Bind<IXMLComponentWriter>().To<XMLPTOWriter_v2_0>().Named(sv));
//Array.ForEach(
// XMLPTOWriter_v1_0.SUPPORTED_VERSIONS,
// sv => Bind<IXMLComponentWriter>().To<XMLPTOWriter_v1_0>().Named(sv));
//Array.ForEach(
// XMLPTOWriter_v2_0.SUPPORTED_VERSIONS,
// sv => Bind<IXMLComponentWriter>().To<XMLPTOWriter_v2_0>().Named(sv));
Array.ForEach(
XMLVehicleWriter_v1_0.SUPPORTEDVERSIONS,
(sv) =>
Bind<IXMLVehicleWriter>().To<XMLVehicleWriter_v1_0>().Named(sv));
//Array.ForEach(
// XMLVehicleWriter_v1_0.SUPPORTEDVERSIONS,
// (sv) =>
// Bind<IXMLVehicleWriter>().To<XMLVehicleWriter_v1_0>().Named(sv));
Array.ForEach(
XMLVehicleWriter_v2_0.SUPPORTEDVERSIONS,
sv =>
Bind<IXMLVehicleWriter>().To<XMLVehicleWriter_v2_0>().Named(sv));
//Array.ForEach(
// XMLVehicleWriter_v2_0.SUPPORTEDVERSIONS,
// sv =>
// Bind<IXMLVehicleWriter>().To<XMLVehicleWriter_v2_0>().Named(sv));
Array.ForEach(
XMLVehicleWriter_v2_10.SUPPORTEDVERSIONS,
sv =>
Bind<IXMLVehicleWriter>().To<XMLVehicleWriter_v2_10>().Named(sv));
Array.ForEach(
XMLComponentsWriter_v1_0.SUPPORTED_VERSIONS,
sv => Bind<IXMLComponentsWriter>().To<XMLComponentsWriter_v1_0>().Named(sv));
//Array.ForEach(
// XMLComponentsWriter_v1_0.SUPPORTED_VERSIONS,
// sv => Bind<IXMLComponentsWriter>().To<XMLComponentsWriter_v1_0>().Named(sv));
Array.ForEach(
XMLComponentsWriter_v2_0.SUPPORTED_VERSIONS,
sv => Bind<IXMLComponentsWriter>().To<XMLComponentsWriter_v2_0>().Named(sv));
//Array.ForEach(
// XMLComponentsWriter_v2_0.SUPPORTED_VERSIONS,
// sv => Bind<IXMLComponentsWriter>().To<XMLComponentsWriter_v2_0>().Named(sv));
Array.ForEach(
XMLEngineWriter_v1_0.SUPPORTED_VERSIONS,
sv => Bind<IXMLComponentWriter>().To<XMLEngineWriter_v1_0>().Named(sv));
//Array.ForEach(
// XMLEngineWriter_v1_0.SUPPORTED_VERSIONS,
// sv => Bind<IXMLComponentWriter>().To<XMLEngineWriter_v1_0>().Named(sv));
Array.ForEach(
XMLEngineWriter_v2_0.SUPPORTED_VERSIONS,
sv => Bind<IXMLComponentWriter>().To<XMLEngineWriter_v2_0>().Named(sv));
//Array.ForEach(
// XMLEngineWriter_v2_0.SUPPORTED_VERSIONS,
// sv => Bind<IXMLComponentWriter>().To<XMLEngineWriter_v2_0>().Named(sv));
Array.ForEach(
XMLGearboxWriter_v2_0.SUPPORTED_VERSIONS,
sv => Bind<IXMLComponentWriter>().To<XMLGearboxWriter_v2_0>().Named(sv));
//Array.ForEach(
// XMLGearboxWriter_v2_0.SUPPORTED_VERSIONS,
// sv => Bind<IXMLComponentWriter>().To<XMLGearboxWriter_v2_0>().Named(sv));
Array.ForEach(
XMLRetarderWriter_v2_0.SUPPORTED_VERSIONS,
sv => Bind<IXMLComponentWriter>().To<XMLRetarderWriter_v2_0>().Named(sv));
//Array.ForEach(
// XMLRetarderWriter_v2_0.SUPPORTED_VERSIONS,
// sv => Bind<IXMLComponentWriter>().To<XMLRetarderWriter_v2_0>().Named(sv));
Array.ForEach(
XMLAxleGearWriter_v2_0.SUPPORTED_VERSIONS,
sv => Bind<IXMLComponentWriter>().To<XMLAxleGearWriter_v2_0>().Named(sv));
//Array.ForEach(
// XMLAxleGearWriter_v2_0.SUPPORTED_VERSIONS,
// sv => Bind<IXMLComponentWriter>().To<XMLAxleGearWriter_v2_0>().Named(sv));
Array.ForEach(
XMLAxleWheelsWriter_v2_0.SUPPORTED_VERSIONS,
sv => Bind<IXMLComponentWriter>().To<XMLAxleWheelsWriter_v2_0>().Named(sv));
//Array.ForEach(
// XMLAxleWheelsWriter_v2_0.SUPPORTED_VERSIONS,
// sv => Bind<IXMLComponentWriter>().To<XMLAxleWheelsWriter_v2_0>().Named(sv));
Array.ForEach(
XMLAxleWheelWriter_v2_0.SUPPORTED_VERSIONS,
sv => Bind<IXMLComponentWriter>().To<XMLAxleWheelWriter_v2_0>().Named(sv));
//Array.ForEach(
// XMLAxleWheelWriter_v2_0.SUPPORTED_VERSIONS,
// sv => Bind<IXMLComponentWriter>().To<XMLAxleWheelWriter_v2_0>().Named(sv));
Array.ForEach(
XMLTyreWriter_v2_0.SUPPORTED_VERSIONS,
sv => Bind<IXMLComponentWriter>().To<XMLTyreWriter_v2_0>().Named(sv));
//Array.ForEach(
// XMLTyreWriter_v2_0.SUPPORTED_VERSIONS,
// sv => Bind<IXMLComponentWriter>().To<XMLTyreWriter_v2_0>().Named(sv));
Array.ForEach(
XMLTyreWriter_v2_3.SUPPORTED_VERSIONS,
sv => Bind<IXMLComponentWriter>().To<XMLTyreWriter_v2_3>().Named(sv));
//Array.ForEach(
// XMLTyreWriter_v2_3.SUPPORTED_VERSIONS,
// sv => Bind<IXMLComponentWriter>().To<XMLTyreWriter_v2_3>().Named(sv));
Array.ForEach(
XMLAuxiliariesWriter_v2_0.SUPPORTED_VERSIONS,
sv => Bind<IXMLComponentWriter>().To<XMLAuxiliariesWriter_v2_0>().Named(sv));
Array.ForEach(
XMLAirDragWriter_v2_0.SUPPORTED_VERSIONS,
sv => Bind<IXMLComponentWriter>().To<XMLAirDragWriter_v2_0>().Named(sv));
//Array.ForEach(
// XMLAuxiliariesWriter_v2_0.SUPPORTED_VERSIONS,
// sv => Bind<IXMLComponentWriter>().To<XMLAuxiliariesWriter_v2_0>().Named(sv));
//Array.ForEach(
// XMLAirDragWriter_v2_0.SUPPORTED_VERSIONS,
// sv => Bind<IXMLComponentWriter>().To<XMLAirDragWriter_v2_0>().Named(sv));
Bind<IXMLBusAuxiliariesWriter>().To<XMLBusAuxiliariesWriterMultistage>();
//Bind<IXMLBusAuxiliariesWriter>().To<XMLBusAuxiliariesWriterMultistage>();
#endregion
}
public string GetName(XNamespace version, string xsdType)
{
return XMLHelper.CombineNamespace(version, xsdType);
}
}
}
......@@ -22,8 +22,8 @@ namespace VECTO3GUI2020.Ninject
Bind<IMultiStageJobViewModel>().To<MultiStageJobViewModel_v0_1>().
NamedLikeFactoryMethod((IMultiStageViewModelFactory f) => f.GetMultiStageJobViewModel(null));
Bind<IVehicleViewModel>().To<InterimStageBusVehicleViewModel_v2_8>().
NamedLikeFactoryMethod((IMultiStageViewModelFactory f)=>f.GetInterimStageVehicleViewModel());
//Bind<IVehicleViewModel>().To<InterimStageBusVehicleViewModel>().
// NamedLikeFactoryMethod((IMultiStageViewModelFactory f)=>f.GetInterimStageVehicleViewModel());
Bind<IManufacturingStageViewModel>().To<ManufacturingStageViewModel_v0_1>().
NamedLikeFactoryMethod((IMultiStageViewModelFactory f) => f.GetManufacturingStageViewModel(null, false));
......
......@@ -32,8 +32,8 @@ namespace VECTO3GUI2020.Ninject.Vehicle
Bind<IVehicleViewModel>().To<InterimStageBusVehicleViewModel_v2_8>().Named(InterimStageBusVehicleViewModel_v2_8.VERSION);
Bind<IVehicleViewModel>().To<InterimStageBusVehicleViewModel_v2_8>().Named(InterimStageBusVehicleViewModel_v2_8.VERSION_EXEMPTED);
Bind<IVehicleViewModel>().To<InterimStageBusVehicleViewModel>().Named(InterimStageBusVehicleViewModel.VERSION);
Bind<IVehicleViewModel>().To<InterimStageBusVehicleViewModel>().Named(InterimStageBusVehicleViewModel.VERSION_EXEMPTED);
Bind<IComponentViewModel>().To<EngineViewModel_v1_0>().Named(EngineViewModel_v1_0.VERSION);
......
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:VECTO3GUI2020"
xmlns:interfaces="clr-namespace:VECTO3GUI2020.ViewModel.Interfaces"
xmlns:views="clr-namespace:VECTO3GUI2020.Views"
xmlns:jobeditviews="clr-namespace:VECTO3GUI2020.Views.JobEditViews"
xmlns:impl="clr-namespace:VECTO3GUI2020.ViewModel.Implementation"
xmlns:jobeditimpl="clr-namespace:VECTO3GUI2020.ViewModel.Implementation.JobEdit"
xmlns:vehicleimpl="clr-namespace:VECTO3GUI2020.ViewModel.Implementation.JobEdit.Vehicle"
xmlns:vehicleviews="clr-namespace:VECTO3GUI2020.Views.JobEditViews.Vehicle"
xmlns:multistageviews="clr-namespace:VECTO3GUI2020.Views.Multistage"
xmlns:additionaljobInfoViews="clr-namespace:VECTO3GUI2020.Views.Multistage.AdditionalJobInfoViews"
xmlns:componentimpl="clr-namespace:VECTO3GUI2020.ViewModel.Implementation.JobEdit.Vehicle.Components"
xmlns:componentviews="clr-namespace:VECTO3GUI2020.Views.JobEditViews.Vehicle.Components"
xmlns:multistageimpl="clr-namespace:VECTO3GUI2020.ViewModel.MultiStage.Implementation"
xmlns:viewModel="clr-namespace:VECTO3GUI2020.ViewModel"
xmlns:common="clr-namespace:VECTO3GUI2020.ViewModel.Implementation.Common">
<DataTemplate x:Shared="False" DataType="{x:Type multistageimpl:InterimStageExemptedBusVehicleViewModel}">
<multistageviews:VehicleView_v2_8/>
</DataTemplate>
<DataTemplate x:Shared="False" DataType="{x:Type multistageimpl:InterimStageConventionalBusVehicleViewModel}">
<multistageviews:VehicleView_v2_8/>
</DataTemplate>
<DataTemplate x:Shared="False" DataType="{x:Type multistageimpl:InterimStageHevBusVehicleViewModel}">
<multistageviews:VehicleView_v2_8/>
</DataTemplate>
<DataTemplate x:Shared="False" DataType="{x:Type multistageimpl:InterimStageIEPCBusVehicleViewModel}">
<multistageviews:VehicleView_v2_8/>
</DataTemplate>
<DataTemplate x:Shared="False" DataType="{x:Type multistageimpl:InterimStagePevBusVehicleViewModel}">
<multistageviews:VehicleView_v2_8/>
</DataTemplate>
</ResourceDictionary>
\ No newline at end of file
......@@ -205,9 +205,6 @@
<multistageviews:ManufacturingStageView></multistageviews:ManufacturingStageView>
</DataTemplate>
<DataTemplate x:Shared="False" DataType="{x:Type multistageimpl:InterimStageBusVehicleViewModel_v2_8}">
<multistageviews:VehicleView_v2_8/>
</DataTemplate>
<DataTemplate x:Shared="False" DataType="{x:Type multistageimpl:MultiStageJobViewModel_v0_1}">
<multistageviews:MultiStageView/>
......
......@@ -8,6 +8,7 @@ using TUGraz.VectoCommon.Models;
using TUGraz.VectoCommon.Resources;
using TUGraz.VectoCommon.Utils;
using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider;
using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider.v24;
using TUGraz.VectoCore.OutputData.XML.ComponentWriter;
using TUGraz.VectoCore.OutputData.XML.GroupWriter;
using TUGraz.VectoCore.Utils;
......@@ -194,9 +195,11 @@ namespace VECTO3GUI2020.Util.XML.Implementation.ComponentWriter
public class XMLVehicleWriter_v2_10 : XMLVehicleWriter
{
private readonly bool _exempted;
public static readonly string[] SUPPORTEDVERSIONS = {
typeof(InterimStageBusVehicleViewModel_v2_8).ToString(),
typeof(StageInputViewModel).ToString()
public static readonly (XNamespace version, string type)[] SUPPORTEDVERSIONS = {
(XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V24, XMLDeclarationConventionalCompletedBusDataProviderV24.XSD_TYPE)
//typeof(InterimStageBusVehicleViewModel).ToString(),
//typeof(StageInputViewModel).ToString()
};
private readonly IGroupWriterFactory _groupWriterFactory;
......@@ -209,7 +212,7 @@ namespace VECTO3GUI2020.Util.XML.Implementation.ComponentWriter
IComponentWriterFactory componentWriterFactory) : base(inputData, xmlWriterFactory)
{
//TODO: CHECK ALL POSSIBIBILITIES FOR VEHICLES
_exempted = inputData.ExemptedVehicle;
_conventional = !_exempted;
......
......@@ -46,6 +46,8 @@ namespace VECTO3GUI2020.Util.XML.Implementation.DocumentWriter
public class XMLDeclarationJobWriter_v1_0 : XMLDeclarationJobWriter
{
public static readonly string[] SUPPORTED_VERSIONS = {
typeof(XMLDeclarationJobInputDataProviderV10).ToString()
};
......
using TUGraz.VectoCommon.InputData;
using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Interfaces;
using TUGraz.VectoCore.Models.Connector.Ports;
using TUGraz.VectoCore.OutputData.XML.Engineering.Interfaces;
using TUGraz.VectoCore.OutputData.XML.Engineering.Writer;
using VECTO3GUI2020.Util.XML.Implementation.ComponentWriter;
......@@ -21,4 +22,75 @@ namespace VECTO3GUI2020.Util.XML.Interfaces
IXMLBusAuxiliariesWriter CreateBuxAuxiliariesWriter(IBusAuxiliariesDeclarationData inputData);
}
public interface IXMLWriterFactoryInternal
{
TWriter CreateWriter<TWriter, TData>(DataSource source, TData inputData);
}
public class XMLWriterFactory : IXMLWriterFactory
{
private IXMLWriterFactoryInternal _internalFactory;
private TWriter CreateWriter<TWriter, TData>(DataSource source, TData inputData)
{
return _internalFactory.CreateWriter<TWriter, TData>(source, inputData);
}
#region Implementation of IXMLWriterFactory
public IXMLDeclarationJobWriter CreateJobWriter(IDeclarationJobInputData inputData)
{
throw new System.NotImplementedException();
}
public IXMLVehicleWriter CreateVehicleWriter(IVehicleDeclarationInputData inputData)
{
return _internalFactory.CreateWriter<IXMLVehicleWriter, IVehicleDeclarationInputData>(inputData.DataSource, inputData);
//throw new System.NotImplementedException();
}
public IXMLComponentWriter CreateComponentWriter(IComponentInputData inputData)
{
throw new System.NotImplementedException();
}
public IXMLComponentWriter CreateComponentWriter(IAuxiliariesDeclarationInputData inputData)
{
throw new System.NotImplementedException();
}
public IXMLComponentWriter CreateComponentWriter(IAxlesDeclarationInputData inputData)
{
throw new System.NotImplementedException();
}
public IXMLComponentWriter CreateComponentWriter(IAxleDeclarationInputData inputData)
{
throw new System.NotImplementedException();
}
public IXMLComponentWriter CreateComponentWriter(IAirdragDeclarationInputData inputData)
{
throw new System.NotImplementedException();
}
public IXMLComponentWriter CreateComponentWriter(IPTOTransmissionInputData inputData)
{
throw new System.NotImplementedException();
}
public IXMLComponentsWriter CreateComponentsWriter(IVehicleComponentsDeclaration inputData)
{
throw new System.NotImplementedException();
}
public IXMLBusAuxiliariesWriter CreateBuxAuxiliariesWriter(IBusAuxiliariesDeclarationData inputData)
{
throw new System.NotImplementedException();
}
#endregion
}
}
......@@ -2,6 +2,7 @@
using TUGraz.VectoCommon.InputData;
using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.Interfaces;
using VECTO3GUI2020.Ninject.Factories;
using VECTO3GUI2020.ViewModel.MultiStage.Interfaces;
namespace VECTO3GUI2020.ViewModel.Interfaces.JobEdit.Vehicle.Components
{
......@@ -27,6 +28,9 @@ namespace VECTO3GUI2020.ViewModel.Interfaces.JobEdit.Vehicle.Components
IComponentViewModel CreateComponentViewModel(IAxleDeclarationInputData inputData);
IComponentViewModel CreateComponentViewModel(IAuxiliariesDeclarationInputData inputData);
IComponentViewModel CreateComponentViewModel(IAuxiliaryDeclarationInputData inputData);
}
public class ComponentViewModelFactory : IComponentViewModelFactory
......
......@@ -6,12 +6,14 @@ using System.Diagnostics;
using System.Resources;
using System.Runtime.CompilerServices;
using System.Xml;
using System.Xml.Linq;
using TUGraz.VectoCommon.BusAuxiliaries;
using TUGraz.VectoCommon.Exceptions;
using TUGraz.VectoCommon.InputData;
using TUGraz.VectoCommon.Models;
using TUGraz.VectoCommon.Utils;
using TUGraz.VectoCore.InputData.FileIO.XML.Declaration.DataProvider.v24;
using TUGraz.VectoCore.Utils;
using VECTO3GUI2020.Helper;
using VECTO3GUI2020.Properties;
using VECTO3GUI2020.ViewModel.Implementation.Common;
......@@ -58,7 +60,7 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation
}
public class InterimStageBusVehicleViewModel_v2_8 : ViewModelBase, IMultistageVehicleViewModel,
public abstract class InterimStageBusVehicleViewModel : ViewModelBase, IMultistageVehicleViewModel,
IVehicleComponentsDeclaration, IAdvancedDriverAssistantSystemDeclarationInputData, IDataErrorInfo
{
public static readonly Type INPUTPROVIDERTYPE = typeof(XMLDeclarationConventionalCompletedBusDataProviderV24);
......@@ -110,7 +112,7 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation
public bool IsPresent => true;
public DataSource DataSource => throw new NotImplementedException();
public DataSource DataSource { get; private set; }
public bool SavedInDeclarationMode => true;
......@@ -141,54 +143,98 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation
}
}
private InterimStageBusVehicleViewModel_v2_8(string inputProviderType, IMultiStageViewModelFactory multiStageViewModelFactory)
protected InterimStageBusVehicleViewModel(IMultiStageViewModelFactory multiStageViewModelFactory, bool exempted = false)
{
if (inputProviderType == VERSION_EXEMPTED)
{
_exemptedVehicle = true;
}
_exemptedVehicle = exempted;
_multiStageViewModelFactory = multiStageViewModelFactory;
InitEmpty();
}
public InterimStageBusVehicleViewModel_v2_8(IVehicleDeclarationInputData consolidatedVehicleData, IVehicleDeclarationInputData vehicleInput, IMultiStageViewModelFactory multistepViewModelFactory)
protected InterimStageBusVehicleViewModel(IVehicleDeclarationInputData consolidatedVehicleData, IVehicleDeclarationInputData vehicleInput, IMultiStageViewModelFactory multistepViewModelFactory)
{
_multiStageViewModelFactory = multistepViewModelFactory;
var vehicleData = consolidatedVehicleData ?? vehicleInput;
_exemptedVehicle = vehicleData.ExemptedVehicle;
if (consolidatedVehicleData != null && vehicleInput == null) {
InitEmpty(consolidatedVehicleData);
InitConsolidated(consolidatedVehicleData);
return;
}
if (vehicleInput != null && consolidatedVehicleData == null) {
InitVehicleData(vehicleInput);
return;
}
if (vehicleInput != null && consolidatedVehicleData == null) {
InitVehicleData(consolidatedVehicleData);
throw new ArgumentException($"Either {nameof(consolidatedVehicleData)} OR {vehicleInput} must be specified");
}
private void SetDataSource(IVehicleDeclarationInputData inputData)
{
//if (inputData.DataSource == null) {
// XNamespace version = XMLDefinitions.DECLARATION_DEFINITIONS_NAMESPACE_URI_V24;
// var type = "";
// if (inputData.ExemptedVehicle) {
// type = XMLDeclarationExemptedCompletedBusDataProviderV24.XSD_TYPE;
// } else {
// switch (inputData.VehicleType) {
// case VectoSimulationJobType.ConventionalVehicle:
// type = XMLDeclarationConventionalCompletedBusDataProviderV24.XSD_TYPE;
// case VectoSimulationJobType.ParallelHybridVehicle:
// case VectoSimulationJobType.SerialHybridVehicle:
// case VectoSimulationJobType.IHPC:
// break;
// case VectoSimulationJobType.BatteryElectricVehicle:
// break;
// case VectoSimulationJobType.IEPC_E:
// break;
// case VectoSimulationJobType.IEPC_S:
// break;
return;
}
// case VectoSimulationJobType.EngineOnlySimulation:
// break;
// default:
// throw new ArgumentOutOfRangeException();
// }
// }
throw new ArgumentException($"Either {nameof(consolidatedVehicleData)} OR {vehicleInput} must be specified");
//} else {
// DataSource = inputData.DataSource;
//}
}
private void InitEmpty(IVehicleDeclarationInputData consolidatedVehicleData)
private void InitEmpty()
{
ConsolidatedVehicleData = consolidatedVehicleData;
if (!_exemptedVehicle) {
MultistageAirdragViewModel = _multiStageViewModelFactory.GetMultistageAirdragViewModel();
MultistageAuxiliariesViewModel = _multiStageViewModelFactory.GetAuxiliariesViewModel();
MultistageAirdragViewModel.AirdragViewModelChanged += ((sender, args) => {
if (sender is IMultistageAirdragViewModel vm)
{
if (AirdragModifiedMultistepMandatory)
{
if (vm.AirDragViewModel != null)
{
AirdragModifiedMultistep = true;
}
}
}
});
}
CreateParameterViewModels();
}
if (!_exemptedVehicle)
private void InitConsolidated(IVehicleDeclarationInputData consolidatedVehicleData)
{
ConsolidatedVehicleData = consolidatedVehicleData;
if (!_exemptedVehicle) {
MultistageAirdragViewModel = _multiStageViewModelFactory.GetMultistageAirdragViewModel(consolidatedVehicleData?.Components?.AirdragInputData);
MultistageAirdragViewModel.AirdragViewModelChanged += ((sender, args) => {
......@@ -209,18 +255,14 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation
.BusAuxiliaries);
}
CreateParameterViewModels();
if (consolidatedVehicleData?.AirdragModifiedMultistep != null)
{
if (consolidatedVehicleData?.AirdragModifiedMultistep != null) {
AirdragModifiedMultistepMandatory = true;
AirdragModifiedMultistepEditingEnabled = true;
}
if (consolidatedVehicleData?.Components?.AirdragInputData != null)
{
if (consolidatedVehicleData?.Components?.AirdragInputData != null) {
AirdragModifiedMultistepMandatory = true;
AirdragModifiedMultistepEditingEnabled = true;
}
......@@ -239,8 +281,7 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation
SetVehicleInputData(vehicleInput);
}
private void CreateParameterViewModels()
{
private void CreateParameterViewModels() {
_parameterViewModels = new Dictionary<string, MultistageParameterViewModel>();
var properties = this.GetType().GetProperties();
var backedUpParameters = new HashSet<string>() {
......@@ -1244,7 +1285,71 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation
private bool _airdragModifiedMultistepMandatory;
private int? _numberPassengersStandingLowerDeck;
private int? _numberPassengersStandingUpperDeck;
private bool _exemptedVehicle;
protected bool _exemptedVehicle;
}
public class InterimStageConventionalBusVehicleViewModel : InterimStageBusVehicleViewModel
{
public InterimStageConventionalBusVehicleViewModel(IVehicleDeclarationInputData consolidatedVehicleData,
IVehicleDeclarationInputData vehicleInput, IMultiStageViewModelFactory multistepViewModelFactory)
: base(consolidatedVehicleData, vehicleInput, multistepViewModelFactory)
{
}
public InterimStageConventionalBusVehicleViewModel(IMultiStageViewModelFactory multiStageViewModelFactory) : base(multiStageViewModelFactory) { }
}
public class InterimStageExemptedBusVehicleViewModel : InterimStageBusVehicleViewModel
{
public InterimStageExemptedBusVehicleViewModel(IVehicleDeclarationInputData consolidatedVehicleData,
IVehicleDeclarationInputData vehicleInput, IMultiStageViewModelFactory multistepViewModelFactory) : base(
consolidatedVehicleData, vehicleInput, multistepViewModelFactory)
{
_exemptedVehicle = true;
}
public InterimStageExemptedBusVehicleViewModel(IMultiStageViewModelFactory multistepViewModelFactory) : base(multistepViewModelFactory, exempted:true)
{
}
}
public class InterimStageHevBusVehicleViewModel : InterimStageBusVehicleViewModel
{
public InterimStageHevBusVehicleViewModel(IVehicleDeclarationInputData consolidatedVehicleData,
IVehicleDeclarationInputData vehicleInput, IMultiStageViewModelFactory multistepViewModelFactory) : base(
consolidatedVehicleData, vehicleInput, multistepViewModelFactory)
{
}
public InterimStageHevBusVehicleViewModel(IMultiStageViewModelFactory multiStageViewModelFactory) : base(multiStageViewModelFactory) { }
}
public class InterimStagePevBusVehicleViewModel : InterimStageBusVehicleViewModel
{
public InterimStagePevBusVehicleViewModel(IVehicleDeclarationInputData consolidatedVehicleData,
IVehicleDeclarationInputData vehicleInput, IMultiStageViewModelFactory multistepViewModelFactory) : base(
consolidatedVehicleData, vehicleInput, multistepViewModelFactory)
{
}
public InterimStagePevBusVehicleViewModel(IMultiStageViewModelFactory multiStageViewModelFactory) : base(multiStageViewModelFactory) { }
}
public class InterimStageIEPCBusVehicleViewModel : InterimStageBusVehicleViewModel
{
public InterimStageIEPCBusVehicleViewModel(IVehicleDeclarationInputData consolidatedVehicleData,
IVehicleDeclarationInputData vehicleInput, IMultiStageViewModelFactory multistepViewModelFactory) : base(
consolidatedVehicleData, vehicleInput, multistepViewModelFactory)
{
}
public InterimStageIEPCBusVehicleViewModel(IMultiStageViewModelFactory multiStageViewModelFactory) : base(multiStageViewModelFactory) { }
}
}
\ No newline at end of file
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.IO;
using System.Linq;
using TUGraz.VectoCommon.Exceptions;
using TUGraz.VectoCommon.InputData;
using TUGraz.VectoCore.Utils;
using VECTO3GUI2020.Properties;
......@@ -14,6 +18,15 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation
{
public class StageInputViewModel : StageViewModelBase, IDocumentViewModel, IJobEditViewModel
{
public enum CompletedBusArchitecture
{
Conventional,
HEV,
PEV,
IEPC,
Exempted
}
private bool _canBeEdited;
private DataSource _dataSource;
private readonly XmlDocumentType _documentType;
......@@ -21,6 +34,40 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation
private bool _selected;
private static uint _newDocumentCounter = 0;
private CompletedBusArchitecture _architecture;
private ObservableCollection<CompletedBusArchitecture> _architectureItems =
new ObservableCollection<CompletedBusArchitecture>(Enum.GetValues(typeof(CompletedBusArchitecture)).Cast<CompletedBusArchitecture>());
public ObservableCollection<CompletedBusArchitecture> ArchitectureItems
{
get => _architectureItems;
set => SetProperty(ref _architectureItems, value);
}
public CompletedBusArchitecture Architecture
{
get => _architecture;
set
{
if (SetProperty(ref _architecture, value)) {
UpdateVehicleViewModel();
}
}
}
private void UpdateVehicleViewModel()
{
if (VehicleViewModel.ShowConsolidatedData) {
throw new VectoException("This is only intended on \"standalone\" step inputs");
}
var oldVm = _vehicleViewModel;
var newVm = _viewModelFactory.GetInterimStageVehicleViewModel(Architecture);
newVm.SetVehicleInputData(oldVm);
VehicleViewModel = newVm;
}
private StageInputViewModel(IMultiStageViewModelFactory multistageViewModelFactory,
IAdditionalJobInfoViewModel additionalJobInfoViewModel) : base(multistageViewModelFactory)
{
......@@ -32,15 +79,21 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation
public StageInputViewModel(bool exemptedVehicle, IMultiStageViewModelFactory multiStageViewModelFactory, IAdditionalJobInfoViewModel additionalJobInfoViewModel) : this(multiStageViewModelFactory, additionalJobInfoViewModel)
{
_vehicleViewModel = _viewModelFactory.CreateStageInputVehicleViewModel(
exemptedVehicle
? InterimStageBusVehicleViewModel_v2_8.VERSION_EXEMPTED
: InterimStageBusVehicleViewModel_v2_8.VERSION) as IMultistageVehicleViewModel;
Architecture = exemptedVehicle
? CompletedBusArchitecture.Exempted
: CompletedBusArchitecture.Conventional;
_vehicleViewModel = multiStageViewModelFactory.GetInterimStageVehicleViewModel(Architecture);
Title = $"{GUILabels.Edit_step_input} - New file";
_documentName = $"New {(exemptedVehicle ? "exempted " : "")}step input {++_newDocumentCounter}";
Init();
return;
}
public StageInputViewModel(IDeclarationInputDataProvider inputData, IMultiStageViewModelFactory multiStageViewModelFactory, IAdditionalJobInfoViewModel additionalJobInfoViewModel) : this(multiStageViewModelFactory,additionalJobInfoViewModel)
......@@ -49,14 +102,14 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation
//_vehicleViewModel =
// _viewModelFactory.CreateStageInputVehicleViewModel(inputData.JobInputData.Vehicle) as IMultistageVehicleViewModel;
//(_vehicleViewModel as InterimStageBusVehicleViewModel_v2_8).ShowConsolidatedData = false;
// (_vehicleViewModel as InterimStageBusVehicleViewModel).ShowConsolidatedData = false;
_dataSource = inputData.DataSource;
VehicleInputDataFilePath = _dataSource.SourceFile;
Title = $"{GUILabels.Edit_step_input} - {Path.GetFileName(_dataSource.SourceFile)}";
return;
Init();
return;
}
#region Overrides of StageViewModelBase
......@@ -84,9 +137,9 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation
private void Init()
{
UpdateTitle();
Components.Add("vehicle", VehicleViewModel as IViewModelBase);
Components.Add("auxiliaries", VehicleViewModel.MultistageAuxiliariesViewModel as IViewModelBase);
Components.Add("airdrag", VehicleViewModel.MultistageAirdragViewModel as IViewModelBase);
Components["vehicle"] = VehicleViewModel as IViewModelBase;
Components["auxiliaries"] = VehicleViewModel.MultistageAuxiliariesViewModel as IViewModelBase;
Components["airdrag"] = VehicleViewModel.MultistageAirdragViewModel as IViewModelBase;
CurrentView = VehicleViewModel as IViewModelBase;
ShowSaveAndCloseButtons = true;
......
......@@ -106,7 +106,8 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation
private bool SwitchViewCanExecute(string viewToShow)
{
return Components[viewToShow] != null;
var found = Components.TryGetValue(viewToShow, out var vm);
return found && vm != null;
}
private IRelayCommand _saveInputDataCommand;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment