Files
StructureHelper/Windows/ViewModels/Calculations/CalculationProperies/CalculationPropertyViewModel.cs
2022-10-30 18:58:51 +05:00

120 lines
4.0 KiB
C#

using StructureHelper.Infrastructure;
using StructureHelperLogics.Infrastructures.CommonEnums;
using StructureHelperLogics.Models.Calculations.CalculationProperties;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;
namespace StructureHelper.Windows.ViewModels.Calculations.CalculationProperies
{
public class CalculationPropertyViewModel : ViewModelBase, IDataErrorInfo
{
public ObservableCollection<IForceCombination> ForceCombinations { get; private set; }
public double IterationAccuracy
{
get
{
return calculationProperty.IterationProperty.Accuracy;
}
set
{
calculationProperty.IterationProperty.Accuracy = value;
OnPropertyChanged(nameof(IterationAccuracy));
}
}
public int MaxIterationCount
{
get
{
return calculationProperty.IterationProperty.MaxIterationCount;
}
set
{
calculationProperty.IterationProperty.MaxIterationCount = value;
OnPropertyChanged(nameof(MaxIterationCount));
}
}
public IForceCombination SelectedCombination { get; set; }
public LimitStates LimitState
{
get
{
return calculationProperty.LimitState;
}
set
{
calculationProperty.LimitState = value;
OnPropertyChanged(nameof(LimitState));
}
}
public CalcTerms CalcTerm
{
get
{
return calculationProperty.CalcTerm;
}
set
{
calculationProperty.CalcTerm = value;
OnPropertyChanged(nameof(CalcTerm));
}
}
public string Error => throw new NotImplementedException();
public string this[string columnName]
{
get
{
string error = string.Empty;
if (columnName == nameof(IterationAccuracy))
{
if (IterationAccuracy < 1e-10) { error = "Assigned accuracy of iterations is not valid"; }
}
else if (columnName == nameof(MaxIterationCount))
{
if (MaxIterationCount < 2) { error = "Number of iterations should be greater than 1"; }
}
return error;
}
}
public ICommand AddForceCombinationCommand { get; private set; }
public ICommand RemoveForceCombinationCommand { get; private set; }
private readonly ICalculationProperty calculationProperty;
public CalculationPropertyViewModel(ICalculationProperty calculationProperty)
{
this.calculationProperty = calculationProperty;
ForceCombinations = new ObservableCollection<IForceCombination>();
foreach (var force in calculationProperty.ForceCombinations)
{
ForceCombinations.Add(force);
}
AddForceCombinationCommand = new RelayCommand(o => AddForceCombination());
RemoveForceCombinationCommand = new RelayCommand(o => RemoveForceCombination(), o => SelectedCombination != null);
}
public void SaveProperties()
{
calculationProperty.ForceCombinations.Clear();
foreach (var force in ForceCombinations)
{
calculationProperty.ForceCombinations.Add(force);
}
}
private void AddForceCombination()
{
ForceCombinations.Add(new ForceCombination());
}
private void RemoveForceCombination()
{
ForceCombinations.Remove(SelectedCombination);
}
}
}