示例#1
0
        public AssessmentViewModel(int numOfStudents, int studentsPerPage, List <Chapter> chapters, PageService _pageService)
        {
            this.studentsPerPage = studentsPerPage;
            this.numOfStudents   = numOfStudents;
            this._pageService    = _pageService;
            _students            = new ObservableCollection <Student>();
            for (int x = 1; x <= numOfStudents; x++)
            {
                _students.Add(new Student {
                    Name = "student " + x
                });
            }
            Students = new ObservableCollection <StudentAndList>();

            for (int s = 0; s < _students.Count; s++)
            {
                Students.Add(new StudentAndList(_students[s], chapters[s]));
            }
            int i = 0;

            while (i < _students.Count)
            {
                ObservableCollection <StudentAndList> temp = new ObservableCollection <StudentAndList>(Students.ToList().GetRange(i, Math.Min(studentsPerPage, Students.Count - i)));
                StudentListGroup sg = new StudentListGroup(temp);
                StudentGroups.Add(sg);
                i += studentsPerPage;
            }
            MistakeItemPressedCommand = new Command <ToolbarItem>((e) => MistakeItemPressedMethod(e));
            MessagingCenter.Subscribe <AssessmentPage, Tuple <StudentAndList, Word, string> >(this, "MostRecentView", (sender, arg) =>
            {
                _selectedStudentAndList = arg.Item1;
                _selectedWord           = arg.Item2;
                _partOfWord             = arg.Item3;
                TheWord = _partOfWord;
            });
        }
        void OnTouchEffectAction(object sender, TouchActionEventArgs args)
        {
            SKCanvasView canvasView = (SKCanvasView)((Grid)sender).Children[0];

            if (!dictOfPaths.ContainsKey(canvasView.Id))
            {
                Dictionary <long, SKPath> inProgressPaths = new Dictionary <long, SKPath>();
                List <SKPath>             completedPaths  = new List <SKPath>();
                dictOfPaths.Add(canvasView.Id, new Tuple <Dictionary <long, SKPath>, List <SKPath> >(inProgressPaths, completedPaths));
            }
            switch (args.Type)
            {
            case TouchActionType.Pressed:
                if (!dictOfPaths[canvasView.Id].Item1.ContainsKey(args.Id))
                {
                    SKPath path = new SKPath();
                    path.MoveTo(ConvertToPixel(canvasView, args.Location));
                    dictOfPaths[canvasView.Id].Item1.Add(args.Id, path);
                    canvasView.InvalidateSurface();
                }
                break;

            case TouchActionType.Moved:
                if (dictOfPaths[canvasView.Id].Item1.ContainsKey(args.Id))
                {
                    SKPath path = dictOfPaths[canvasView.Id].Item1[args.Id];
                    path.LineTo(ConvertToPixel(canvasView, args.Location));
                    canvasView.InvalidateSurface();
                }
                break;

            case TouchActionType.Released:
                if (MistakeRegistred == false)
                {
                    undoLastDrawing();
                }
                MistakeRegistred = false;
                if (dictOfPaths[canvasView.Id].Item1.ContainsKey(args.Id))
                {
                    dictOfPaths[canvasView.Id].Item2.Add(dictOfPaths[canvasView.Id].Item1[args.Id]);
                    pushIntoMemory(canvasView);

                    SKPoint[] pathpoints = dictOfPaths[canvasView.Id].Item1[args.Id].Points;
                    float     minx       = (float)Int32.MaxValue;
                    float     maxx       = 0;
                    foreach (SKPoint point in pathpoints)
                    {
                        minx = Math.Min(minx, point.X);
                        maxx = Math.Max(maxx, point.X);
                    }
                    StackLayout sl           = (StackLayout)((Grid)sender).Children[1];
                    double      space        = sl.Spacing;
                    double      pos          = 0;
                    int         firstChar    = 0;
                    int         lastChar     = sl.Children.Count - 1;
                    bool        firstCharSet = false;

                    for (int i = 0; i < sl.Children.Count; i++)
                    {
                        if (i == 0)
                        {
                            pos += ((Label)(sl.Children[i])).Width + space / 2;
                        }
                        else
                        {
                            pos += ((Label)(sl.Children[i])).Width + space;
                        }
                        if ((!firstCharSet) && (minx <= pos))
                        {
                            firstChar    = i;
                            firstCharSet = true;
                        }
                        if ((firstCharSet) && (maxx <= pos))
                        {
                            lastChar = i;
                            break;
                        }
                    }

                    Word           word           = (Word)((Grid)sender).BindingContext;
                    StudentAndList studentAndList = (StudentAndList)(canvasView.BindingContext);

                    MessagingCenter.Send <AssessmentPage, Tuple <StudentAndList, Word, string> >(this, "MostRecentView", new Tuple <StudentAndList, Word, string>(studentAndList, word, word.WordText.Substring(firstChar, lastChar - firstChar + 1)));

                    dictOfPaths[canvasView.Id].Item1.Remove(args.Id);

                    canvasView.InvalidateSurface();
                }
                break;

            case TouchActionType.Cancelled:
                if (MistakeRegistred == false)
                {
                    undoLastDrawing();
                }
                MistakeRegistred = false;
                if (dictOfPaths[canvasView.Id].Item1.ContainsKey(args.Id))
                {
                    dictOfPaths[canvasView.Id].Item1.Remove(args.Id);
                    canvasView.InvalidateSurface();
                }
                break;
            }
        }