public ChartTabViewModel(Solver solver, List <PartialUtility> chartsPartialUtilities, SettingsTabViewModel settingsTabViewModel, Action refreshCharts) { _solver = solver; _chartsPartialUtilities = chartsPartialUtilities; _criteria = _chartsPartialUtilities.Select(utility => utility.Criterion).ToList(); _chartsPointsValues = _chartsPartialUtilities.Select(utility => utility.PointsValues).ToList(); _settings = settingsTabViewModel; _refreshCharts = refreshCharts; Name = ManagesSinglePUFunction ? $"{_criteria[0].Name} - Utility" : "Partial Utility Functions"; Title = ManagesSinglePUFunction ? $"{_criteria[0].Name} - Partial Utility Function" : "Partial Utility Functions"; _chartsRanges = new List <Dictionary <double, LineAnnotation> >(); _chartsDraggablePoints = new List <Dictionary <double, PointAnnotation> >(); _chartsDraggablePointTooltip = new List <TextAnnotation>(); const double verticalAxisExtraSpace = 0.0001; PlotModels = _criteria.Select(criterion => { var horizontalAxisExtraSpace = (criterion.MaxValue - criterion.MinValue) * 0.002; return(new ViewResolvingPlotModel { Title = ManagesSinglePUFunction ? null : criterion.Name, TitleFontSize = AreChartsDense ? 12 : 16, TitleFontWeight = 400, Series = { new LineSeries { Color = _lineColor, StrokeThickness = 3 } }, DefaultFont = "Segoe UI", DefaultFontSize = AreChartsDense ? 11 : 14, Padding = new OxyThickness(0, 0, 0, 0), PlotAreaBackground = OxyColors.White, Axes = { new LinearAxis { Position = AxisPosition.Left, Title = "Utility", FontSize = AreChartsDense ? 12 : 16, MajorGridlineStyle = LineStyle.Solid, MajorGridlineColor = _gridColor, AbsoluteMinimum = 0 - verticalAxisExtraSpace, AbsoluteMaximum = 1 + verticalAxisExtraSpace, Minimum = 0 - verticalAxisExtraSpace, Maximum = 1 + verticalAxisExtraSpace, MajorTickSize = 8, IntervalLength = AreChartsDense ? 20 : 30, AxisTitleDistance = AreChartsDense ? 10 : 12 }, new LinearAxis { Position = AxisPosition.Bottom, Title = "Criterion Value", FontSize = AreChartsDense ? 12 : 16, MajorGridlineStyle = LineStyle.Solid, MajorGridlineColor = _gridColor, AbsoluteMinimum = criterion.MinValue - horizontalAxisExtraSpace, AbsoluteMaximum = criterion.MaxValue + horizontalAxisExtraSpace, Minimum = criterion.MinValue - horizontalAxisExtraSpace, Maximum = criterion.MaxValue + horizontalAxisExtraSpace, MajorTickSize = 8, AxisTitleDistance = 4 } } }); }).ToList(); GenerateChartData(); }
public MainViewModel(IDialogCoordinator dialogCoordinator) { Criteria = new Criteria(); ReferenceRanking = new ReferenceRanking(); Alternatives = new Alternatives(Criteria, ReferenceRanking); Results = new Results(); _dialogCoordinator = dialogCoordinator; _saveData = new SaveData(null, null); Tabs = new ObservableCollection <ITab>(); Tabs.CollectionChanged += TabsCollectionChanged; ChartTabViewModels = new ObservableCollection <ChartTabViewModel>(); ShowTabCommand = new RelayCommand(tabViewModel => ShowTab((ITab)tabViewModel)); CriteriaTabViewModel = new CriteriaTabViewModel(Criteria); AlternativesTabViewModel = new AlternativesTabViewModel(Criteria, Alternatives); ReferenceRankingTabViewModel = new ReferenceRankingTabViewModel(ReferenceRanking, Alternatives); SettingsTabViewModel = new SettingsTabViewModel(); WelcomeTabViewModel = new WelcomeTabViewModel(); Criteria.CriteriaCollection.CollectionChanged += InstancePropertyChanged; Alternatives.AlternativesCollection.CollectionChanged += InstancePropertyChanged; ReferenceRanking.RankingsCollection.CollectionChanged += InstancePropertyChanged; Results.FinalRanking.FinalRankingCollection.CollectionChanged += InstancePropertyChanged; Criteria.PropertyChanged += (sender, args) => { if (args.PropertyName != nameof(Criteria.CriteriaCollection)) { return; } InstancePropertyChanged(); Criteria.CriteriaCollection.CollectionChanged += InstancePropertyChanged; }; Alternatives.PropertyChanged += (sender, args) => { if (args.PropertyName != nameof(Alternatives.AlternativesCollection)) { return; } InstancePropertyChanged(); Alternatives.AlternativesCollection.CollectionChanged += InstancePropertyChanged; }; ReferenceRanking.PropertyChanged += (sender, args) => { if (args.PropertyName != nameof(ReferenceRanking.RankingsCollection)) { return; } InstancePropertyChanged(); ReferenceRanking.RankingsCollection.CollectionChanged += InstancePropertyChanged; }; Results.FinalRanking.PropertyChanged += (sender, args) => { if (args.PropertyName != nameof(Results.FinalRanking.FinalRankingCollection)) { return; } InstancePropertyChanged(); Results.FinalRanking.FinalRankingCollection.CollectionChanged += InstancePropertyChanged; }; }