Ejemplo n.º 1
0
        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();
        }
Ejemplo n.º 2
0
        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;
            };
        }