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; } }