From daf9b86e23869ad2df9b46146739aa630d0ab904 Mon Sep 17 00:00:00 2001
From: "harald.martini@student.tugraz.at" <harald.martini@student.tugraz.at>
Date: Fri, 30 Jul 2021 10:39:45 +0200
Subject: [PATCH] Fixed disabled save button in StageInputView

---
 .../MultistageJobViewModel_v0_1.cs            |  4 +--
 .../Implementation/StageInputViewModel.cs     |  2 ++
 .../Implementation/StageViewModelBase.cs      | 25 +++++++++++--------
 .../ViewModelTests/StageViewModelTests.cs     |  2 +-
 4 files changed, 20 insertions(+), 13 deletions(-)

diff --git a/VECTO3GUI2020/ViewModel/MultiStage/Implementation/MultistageJobViewModel_v0_1.cs b/VECTO3GUI2020/ViewModel/MultiStage/Implementation/MultistageJobViewModel_v0_1.cs
index f656e1deaa..a18970ab18 100644
--- a/VECTO3GUI2020/ViewModel/MultiStage/Implementation/MultistageJobViewModel_v0_1.cs
+++ b/VECTO3GUI2020/ViewModel/MultiStage/Implementation/MultistageJobViewModel_v0_1.cs
@@ -277,10 +277,10 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation
 
 		public string VehicleInputDataFilePath
 		{
-			get => ManufacturingStageViewModel.InputDataFilePath;
+			get => ManufacturingStageViewModel.VehicleInputDataFilePath;
 			set
 			{
-				ManufacturingStageViewModel.InputDataFilePath = value;
+				ManufacturingStageViewModel.VehicleInputDataFilePath = value;
 				OnPropertyChanged();
 			}
 		}
diff --git a/VECTO3GUI2020/ViewModel/MultiStage/Implementation/StageInputViewModel.cs b/VECTO3GUI2020/ViewModel/MultiStage/Implementation/StageInputViewModel.cs
index 2b08c6e6e4..29818686e8 100644
--- a/VECTO3GUI2020/ViewModel/MultiStage/Implementation/StageInputViewModel.cs
+++ b/VECTO3GUI2020/ViewModel/MultiStage/Implementation/StageInputViewModel.cs
@@ -56,6 +56,7 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation
 			(_vehicleViewModel as InterimStageBusVehicleViewModel_v2_8).ShowConsolidatedData = false;
 
 			_dataSource = inputData.DataSource;
+			VehicleInputDataFilePath = _dataSource.SourceFile;
 
 			Title = $"Edit Stage Input - {Path.GetFileName(_dataSource.SourceFile)}";
 			Init();
@@ -69,6 +70,7 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation
 		protected override void LoadStageInputDataFollowUp(IDeclarationInputDataProvider loadedInputData)
 		{
 			DataSource = loadedInputData.DataSource;
+			VehicleInputDataFilePath = DataSource.SourceFile;
 			UpdateTitle();			
 			DocumentName = loadedInputData.JobInputData.JobName;
 		}
diff --git a/VECTO3GUI2020/ViewModel/MultiStage/Implementation/StageViewModelBase.cs b/VECTO3GUI2020/ViewModel/MultiStage/Implementation/StageViewModelBase.cs
index b89f5f0265..622e89e146 100644
--- a/VECTO3GUI2020/ViewModel/MultiStage/Implementation/StageViewModelBase.cs
+++ b/VECTO3GUI2020/ViewModel/MultiStage/Implementation/StageViewModelBase.cs
@@ -7,6 +7,7 @@ using System.Windows;
 using System.Windows.Input;
 using System.Xml.Linq;
 using Castle.Core.Internal;
+using Microsoft.Toolkit.Mvvm.Input;
 using Ninject;
 using TUGraz.VectoCommon.InputData;
 using TUGraz.VectoCore.InputData.FileIO.XML;
@@ -14,20 +15,20 @@ using TUGraz.VectoCore.Utils;
 using VECTO3GUI2020.Helper;
 using VECTO3GUI2020.Ninject;
 using VECTO3GUI2020.Properties;
-using VECTO3GUI2020.Util;
 using VECTO3GUI2020.Util.XML;
 using VECTO3GUI2020.ViewModel.Implementation.Common;
 using VECTO3GUI2020.ViewModel.Interfaces.Common;
 using VECTO3GUI2020.ViewModel.MultiStage.Interfaces;
+using RelayCommand = VECTO3GUI2020.Util.RelayCommand;
 
 namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation
 {
 	public interface IStageViewModelBase
 	{
-		string InputDataFilePath { get; set; }
+		string VehicleInputDataFilePath { get; set; }
 		IMultistageVehicleViewModel VehicleViewModel { get; set; }
 		ICommand SwitchComponentViewCommand { get; }
-		ICommand SaveInputDataCommand { get; }
+		IRelayCommand SaveInputDataCommand { get; }
 		ICommand SaveInputDataAsCommand { get; }
 		ICommand LoadVehicleDataCommand { get; }
 		bool ShowSaveAndCloseButtons { get; set; }
@@ -91,7 +92,7 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation
 			get
 			{
 				return _switchComponentViewCommand ??
-						new RelayCommand<string>(SwitchViewExecute, (string s) => SwitchViewCanExecute(s));
+						new Util.RelayCommand<string>(SwitchViewExecute, (string s) => SwitchViewCanExecute(s));
 			}
 		}
 
@@ -109,14 +110,14 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation
 			return Components[viewToShow] != null;
 		}
 
-		private ICommand _saveInputDataCommand;
+		private IRelayCommand _saveInputDataCommand;
 		private ICommand _saveInputDataAsCommand;
 		private IMultistageDependencies _multistageDependencies;
 		private IXMLInputDataReader _inputDataReader;
 
-		public ICommand SaveInputDataCommand =>
+		public IRelayCommand SaveInputDataCommand =>
 			_saveInputDataCommand ??
-			new RelayCommand(() => { SaveInputDataExecute(filename: _vehicleInputDataFilePath); },
+			new Microsoft.Toolkit.Mvvm.Input.RelayCommand(() => { SaveInputDataExecute(filename: _vehicleInputDataFilePath); },
 				() => _vehicleInputDataFilePath != null);
 
 		public ICommand SaveInputDataAsCommand =>
@@ -232,7 +233,7 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation
 				var inputData = (IDeclarationInputDataProvider)_inputDataReader.Create(fileName);
 				var vehicleInputData = inputData.JobInputData.Vehicle;
 				VehicleViewModel.SetVehicleInputData(vehicleInputData);
-				InputDataFilePath = inputData.DataSource.SourceFile;
+				VehicleInputDataFilePath = inputData.DataSource.SourceFile;
 				LoadStageInputDataFollowUp(inputData);
 
 
@@ -251,10 +252,14 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation
 
 		}
 
-		public string InputDataFilePath
+		public string VehicleInputDataFilePath
 		{
 			get => _vehicleInputDataFilePath;
-			set => SetProperty(ref _vehicleInputDataFilePath, value);
+			set
+			{
+				SetProperty(ref _vehicleInputDataFilePath, value);
+				_saveInputDataCommand?.NotifyCanExecuteChanged();
+			}
 		}
 
 		#endregion
diff --git a/Vecto3GUI2020Test/ViewModelTests/StageViewModelTests.cs b/Vecto3GUI2020Test/ViewModelTests/StageViewModelTests.cs
index 3cf07d8a49..f2362460d5 100644
--- a/Vecto3GUI2020Test/ViewModelTests/StageViewModelTests.cs
+++ b/Vecto3GUI2020Test/ViewModelTests/StageViewModelTests.cs
@@ -32,7 +32,7 @@ namespace Vecto3GUI2020Test.ViewModelTests
 			var fileName = TestHelper.GetMethodName() + ".xml";
 			StageInput.SaveInputDataExecute(GetFullPath(fileName));
 			Assert.True(checkFileNameExists(fileName));
-			Assert.AreEqual(GetFullPath(fileName), StageInput.InputDataFilePath);
+			Assert.AreEqual(GetFullPath(fileName), StageInput.VehicleInputDataFilePath);
 
 			//Check if title is updated
 			StringAssert.Contains(fileName, StageInput.Title);
-- 
GitLab