(WPF) Ошибка привязки данных XAML

Уже голову ломаю какой день, может кто увидит где допущена ошибка. При запуске программы выдает ошибку привязки данных XAML "null RotationAngle RotateTransform.Angle Double Не удается найти управляющий FrameworkElement или FrameworkContentElement для целевого элемента".

View:

<Window x:Class="MyKeys.View.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:vm="clr-namespace:MyKeys.ViewModel" 
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="350">
    <Grid d:DataContext="{d:DesignInstance Type=vm:BoardVM, IsDesignTimeCreatable=False}">
        <Grid.RowDefinitions>
            <RowDefinition Height="*"/>
            <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>
        <ItemsControl ItemsSource="{Binding AllCells}">
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <UniformGrid IsItemsHost="True"
                                 Rows="{Binding Width}" Columns="{Binding Height}"/>
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>
            <ItemsControl.ItemTemplate>
                <DataTemplate DataType="{x:Type vm:CellVM}">
                    <Button Command="{Binding Activate}" Margin="10" Padding="10">
                        <Path Data="M 0,1 L 1,0 L 2,1 M 1,2 L 1,0"
                              Stroke="Black" Stretch="Uniform"
                              RenderTransformOrigin="0.5,0.5">
                            <Path.RenderTransform>
                                <RotateTransform Angle="{Binding RotationAngle}"/>
                            </Path.RenderTransform>
                        </Path>
                    </Button>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
        <StackPanel Orientation="Horizontal" Grid.Row="1" HorizontalAlignment="Center">
            <Label Target="{Binding ElementName=ColumnChooser}">Columns:</Label>
            <ComboBox Name="ColumnChooser" SelectedItem="{Binding Width}"
                      ItemsSource="{x:Static vm:GameInfo.PossibleColumnNumber}"/>
            <Label Target="{Binding ElementName=RowChooser}">Rows:</Label>
            <ComboBox Name="RowChooser" SelectedItem="{Binding Height}"
                      ItemsSource="{x:Static vm:GameInfo.PossibleRowNumber}"/>
        </StackPanel>
    </Grid>
</Window>

ViewModel:

using System;
using System.Collections.Generic;
using System.Linq;

namespace MyKeys.ViewModel
{
    internal class BoardVM : VM
    {
        private int width = GameInfo.PossibleColumnNumber.Min();
        public int Width
        {
            get => width;
            set { if (Set(ref width, value)) { GenerateCells(); } }
        }

        private int height = GameInfo.PossibleRowNumber.Min();
        public int Height
        {
            get => height;
            set { if (Set(ref height, value)) { GenerateCells(); } }
        }

        private CellVM[,] cells;

        public IEnumerable<CellVM> AllCells => cells.Cast<CellVM>();

        void GenerateCells()
        {
            var cells = new CellVM[width, height];
            for (int row = 0; row < height; row++)
                for (int column = 0; column < width; column++)
                    cells[column, row] = new CellVM(row, column, OnCellActivate);
            ShuffleAngles(cells);
            this.cells = cells;
            RaisePropertyChanged(nameof(AllCells));
        }
        static Random random = new Random();
        void ShuffleAngles(CellVM[,] cells)
        {
            for (int y = 0; y < height; y++)
                for (int x = 0; x < width; x++)
                    cells[x, y].RotationAngle = random.Next(4) * 90;
        }
        void OnCellActivate(int row0, int column0)
        {
            for (int row = 0; row < height; row++)
            {
                Rotate(cells[column0, row]);
            }

            for (int column = 0; column < width; column++)
            {
                if (column != column0)
                    Rotate(cells[column, row0]);
            }
        }

        private void Rotate(CellVM cellVM)
        {
            cellVM.RotationAngle = (cellVM.RotationAngle + 90) % 360;
        }
        public BoardVM()
        {
            GenerateCells();
        }
    }
}
using GalaSoft.MvvmLight.Command;
using System;
using System.Windows.Input;

namespace MyKeys.ViewModel
{
    internal class CellVM : VM
    {
        public CellVM(int row, int column, Action<int, int> onActivate)
        {
            Row = row;
            Column = column;
            Activate = new RelayCommand(() => onActivate(row, column));
        }

        private double rotationAngle = 0;
        public double RotationAngle
        {
            get => rotationAngle;
            set => Set(ref rotationAngle, value);
        }

        public int Row { get; }
        public int Column { get; }

        public ICommand Activate { get; }
    }
}
using System.Collections.Generic;

namespace MyKeys.ViewModel
{
    internal static class GameInfo
    {
        static public IEnumerable<int> PossibleColumnNumber { get; } = new[] { 3, 4, 5, 6 };
        static public IEnumerable<int> PossibleRowNumber { get; } = new[] { 3, 4, 5, 6 };
    }
}
using System.Collections.Generic;
using System.ComponentModel;
using System.Runtime.CompilerServices;

namespace MyKeys.ViewModel
{
    internal class VM : INotifyPropertyChanged
    {
        protected bool Set<T>(ref T field, T value,
                         [CallerMemberName] string propertyName = null)
        {
            if (EqualityComparer<T>.Default.Equals(field, value))
                return false;

            field = value;
            RaisePropertyChanged(propertyName);
            return true;
        }

        protected void RaisePropertyChanged([CallerMemberName] string propertyName = null)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }

        public event PropertyChangedEventHandler PropertyChanged;
    }
}

App:

<Application x:Class="MyKeys.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
</Application>
using MyKeys.View;
using MyKeys.ViewModel;
using System.Windows;

namespace MyKeys
{
    public partial class App : Application
    {
        private BoardVM boardVM = new BoardVM();

        protected override void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);
            new MainWindow() { DataContext = boardVM }.Show();
        }
    }
}

Ответы (0 шт):