private void HandleColumnAdded(ColumnVM colVM)
        {
            //handling column itself
            ColumnView view = new ColumnView();

            view.DataContext = colVM;

            //point selection related
            view.MouseDown            += View_MouseDown;
            view.TouchDown            += View_TouchDown;
            view.TouchMove            += View_TouchMove;
            view.TouchUp              += View_TouchUp;
            view.IsManipulationEnabled = true;
            view.TouchLeave           += View_TouchLeave;

            view.SizeChanged += View_SizeChanged;

            ColumnDefinition cd = new ColumnDefinition();

            cd.Width = GridLength.Auto;
            this.ColumnsGrid.ColumnDefinitions.Add(cd);


            Grid.SetColumn(view, this.ColumnsGrid.ColumnDefinitions.Count - 1);
            Grid.SetRow(view, 1);
            this.ColumnsGrid.Children.Add(view);

            //Handling header
            ColumnDefinition header_cd = new ColumnDefinition();

            header_cd.Width = GridLength.Auto;
            this.HeadersGrid.ColumnDefinitions.Add(header_cd);

            RotateTransform headingRotation = new RotateTransform(-90);
            TextBlock       heading         = new TextBlock();

            heading.Margin = new Thickness(5);
            heading.HorizontalAlignment = HorizontalAlignment.Center;
            heading.VerticalAlignment   = VerticalAlignment.Center;
            heading.Text = colVM.Heading;
            //heading.TextWrapping = TextWrapping.Wrap;
            //heading.MaxHeight = 200;
            heading.LayoutTransform = headingRotation;
            Border textBorder = new Border()
            {
                BorderBrush = new SolidColorBrush(Colors.Black), BorderThickness = new Thickness(1)
            };

            textBorder.Child = heading;

            Grid.SetColumn(textBorder, this.HeadersGrid.ColumnDefinitions.Count - 1);
            Grid.SetRow(textBorder, 0);
            this.HeadersGrid.Children.Add(textBorder);
        }
        private void Columns_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
        {
            if (e.NewItems != null)
            {
                if (e.NewItems.Count != 1)
                {
                    throw new InvalidOperationException();
                }

                ColumnVM colVM = e.NewItems[0] as ColumnVM;
                HandleColumnAdded(colVM);
            }
        }
 public ColVMAdapter(ColumnVM target)
 {
     vm = target;
 }