public void GenerateGirdViewModels()
        {
            var gameCore = GameManager.Instance.GameCore;
            var gridItems = gameCore.GetAllGridItems();

            List<GridViewModel> gridViewModels = new List<GridViewModel>();

            foreach (var gridItem in gridItems)
            {
                var gridViewModel = new GridViewModel()
                    {
                        Value = gridItem.Value,
                        Level = gridItem.Level,
                        Row = gridItem.Owner.Row,
                        Col = gridItem.Owner.Col,
                    };

                GridMoveInfo moveInfo;
                if (gameCore.TryGetMoveInfo(gridItem, out moveInfo))
                {
                    gridViewModel.GridStates |= GridStates.Moved;
                    gridViewModel.MoveInfo = moveInfo;
                }

                if (gameCore.IsDeletedGridItem(gridItem))
                {
                    gridViewModel.GridStates |= GridStates.Deleted;
                }

                if (gameCore.IsNewCreatedItem(gridItem))
                {
                    gridViewModel.GridStates |= GridStates.NewCreated;
                }

                gridViewModels.Add(gridViewModel);
            }

            GridViewModels = gridViewModels;
        }
        private void ProcessMoveGridItem(UIElement itemControl, GridViewModel gridViewModel, double itemWidth, double itemHeight)
        {
            GridMoveInfo moveInfo = gridViewModel.MoveInfo;
            if (moveInfo.FromCol != moveInfo.ToCol)
            {
                itemControl.BeginAnimation(
                    Canvas.LeftProperty,
                    CreateMoveAnimation(moveInfo.FromCol * itemWidth, moveInfo.ToCol * itemWidth));
            }
            else
            {
                Canvas.SetLeft(itemControl, moveInfo.ToCol * itemWidth);
            }

            if (moveInfo.FromRow != moveInfo.ToRow)
            {
                itemControl.BeginAnimation(
                    Canvas.TopProperty,
                    CreateMoveAnimation(moveInfo.FromRow * itemHeight, moveInfo.ToRow * itemHeight));
            }
            else
            {
                Canvas.SetTop(itemControl, moveInfo.ToRow * itemHeight);
            }
        }
 private UIElement CreateGridItem(double width, double height, GridViewModel gridViewModel)
 {
     Button button = new Button()
         {
             Width = width,
             Height = height,
             Style = _gridItemStyle,
             Content = gridViewModel,
             Focusable = false
         };
     return button;
 }
 public void EnlargeGrid(GridViewModel gridViewModel)
 {
     GameManager.Instance.GameCore.EnlargeGrid(gridViewModel.Row, gridViewModel.Col);
     GenerateGirdViewModels();
 }