private void Polygons_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
        {
            if (e.NewItems != null)
            {
                foreach (var obj in e.NewItems)
                {
                    AnnotatedPolygon poly = (AnnotatedPolygon)obj;

                    poly.MouseRightButtonUp += Poly_MouseRightButtonUp;
                    poly.PreviewTouchUp     += Poly_PreviewTouchUp;

                    CommonCanvas.Children.Insert(1, poly);
                    Canvas.SetZIndex(poly, 1);
                }
            }

            if (e.OldItems != null)
            {
                foreach (var obj in e.OldItems)
                {
                    AnnotatedPolygon poly = (AnnotatedPolygon)obj;
                    RemovePolygon(poly);
                }
            }
        }
 private void RemovePolygon(AnnotatedPolygon poly)
 {
     poly.MouseRightButtonUp -= Poly_MouseRightButtonUp;
     poly.PreviewTouchUp     -= Poly_PreviewTouchUp;
     CommonCanvas.Children.Remove(poly);
 }
        /// <summary>
        /// Binds the View (e.g. IInfoLayerElements that are on the CoodTranformedCanvas) to the
        /// </summary>
        /// <param name="up">Upper point of the core sample main axis</param>
        /// <param name="bottom">Bottom point of the core sample main axis</param>
        /// <param name="side">Any point that is on the side of the core sampe</param>
        /// <param name="poly">An annotated polygon, that highlights the core sample</param>
        /// <param name="vm">View Model that desribes the region</param>
        private static void BindInfoLayer(PhotoCalibrationMarker up, PhotoCalibrationMarker bottom, PhotoCalibrationMarker side, AnnotatedPolygon poly, CalibratedRegionVM vm)
        {
            vm.Up     = up.CentreLocation;
            vm.Bottom = bottom.CentreLocation;
            vm.Side   = side.CentreLocation;

            var b1 = new Binding(nameof(vm.Up));

            b1.Source = vm;
            b1.Mode   = BindingMode.TwoWay;
            up.SetBinding(PhotoCalibrationMarker.CentreLocationLocationProperty, b1);

            var b2 = new Binding(nameof(vm.Bottom));

            b2.Source = vm;
            b2.Mode   = BindingMode.TwoWay;
            bottom.SetBinding(PhotoCalibrationMarker.CentreLocationLocationProperty, b2);

            var b3 = new Binding(nameof(vm.Side));

            b3.Source = vm;
            b3.Mode   = BindingMode.TwoWay;
            side.SetBinding(PhotoCalibrationMarker.CentreLocationLocationProperty, b3);

            var visConverter = new CollapsedConverter();

            var b4 = new Binding(nameof(vm.AreMarkersVisible));

            b4.Source    = vm;
            b4.Converter = visConverter;
            up.SetBinding(UIElement.VisibilityProperty, b4);

            var b5 = new Binding(nameof(vm.AreMarkersVisible));

            b5.Source    = vm;
            b5.Converter = visConverter;
            bottom.SetBinding(UIElement.VisibilityProperty, b5);

            var b6 = new Binding(nameof(vm.AreMarkersVisible));

            b6.Source    = vm;
            b6.Converter = visConverter;
            side.SetBinding(UIElement.VisibilityProperty, b6);
        }