Есть 64 клетки и нужно добавить перемещение коня(его изображения) по полю. Я передавал позицию коня через CommandParameter, так и сделал его перемещение, но не могу теперь привязать картинку.
Xaml код:
<Window x:Class="Cursovaya.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:local="clr-namespace:Cursovaya.ViewModels"
mc:Ignorable="d"
Title="MainWindow" Height="650" Width="600">
<Window.Resources>
<Style x:Key="LightCell" TargetType="Button">
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="Command" Value="{Binding KnightMove}"/>
<Setter Property="Background" Value="Bisque"/>
<Setter Property="BorderBrush" Value="Black"/>
<Setter Property="Content" Value="123"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"/>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="BorderThickness" Value="1"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="DarkCell" TargetType="Button">
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="Command" Value="{Binding KnightMove}"/>
<Setter Property="Background" Value="SandyBrown"/>
<Setter Property="BorderBrush" Value="Black"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"/>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="BorderThickness" Value="1"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition Height="10"/>
</Grid.RowDefinitions>
<Grid Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition Width="8"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition Height="8*"/>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid Grid.Row="1" Grid.Column="1">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Button Style="{StaticResource LightCell}" Grid.Column="0" Grid.Row="0" Content="123" CommandParameter="1"/>
<Button Style="{StaticResource DarkCell}" Grid.Column="1" Grid.Row="0" Content="123" CommandParameter="2"/>
<Button Style="{StaticResource LightCell}" Grid.Column="2" Grid.Row="0" CommandParameter="3"/>
<Button Style="{StaticResource DarkCell}" Grid.Column="3" Grid.Row="0" CommandParameter="4"/>
<Button Style="{StaticResource LightCell}" Grid.Column="4" Grid.Row="0" CommandParameter="5"/>
<Button Style="{StaticResource DarkCell}" Grid.Column="5" Grid.Row="0" CommandParameter="6"/>
<Button Style="{StaticResource LightCell}" Grid.Column="6" Grid.Row="0" CommandParameter="7"/>
<Button Style="{StaticResource DarkCell}" Grid.Column="7" Grid.Row="0" CommandParameter="8"/>
<Button Style="{StaticResource DarkCell}" Grid.Column="0" Grid.Row="1" CommandParameter="9"/>
<Button Style="{StaticResource LightCell}" Grid.Column="1" Grid.Row="1" CommandParameter="10"/>
<Button Style="{StaticResource DarkCell}" Grid.Column="2" Grid.Row="1" CommandParameter="11"/>
<Button Style="{StaticResource LightCell}" Grid.Column="3" Grid.Row="1" CommandParameter="12"/>
<Button Style="{StaticResource DarkCell}" Grid.Column="4" Grid.Row="1" CommandParameter="13"/>
<Button Style="{StaticResource LightCell}" Grid.Column="5" Grid.Row="1" CommandParameter="14"/>
<Button Style="{StaticResource DarkCell}" Grid.Column="6" Grid.Row="1" CommandParameter="15"/>
<Button Style="{StaticResource LightCell}" Grid.Column="7" Grid.Row="1" CommandParameter="16"/>
<Button Style="{StaticResource LightCell}" Grid.Column="0" Grid.Row="2" CommandParameter="17"/>
<Button Style="{StaticResource DarkCell}" Grid.Column="1" Grid.Row="2" CommandParameter="18"/>
<Button Style="{StaticResource LightCell}" Grid.Column="2" Grid.Row="2" CommandParameter="19"/>
<Button Style="{StaticResource DarkCell}" Grid.Column="3" Grid.Row="2" CommandParameter="20"/>
<Button Style="{StaticResource LightCell}" Grid.Column="4" Grid.Row="2" CommandParameter="21"/>
<Button Style="{StaticResource DarkCell}" Grid.Column="5" Grid.Row="2" CommandParameter="22"/>
<Button Style="{StaticResource LightCell}" Grid.Column="6" Grid.Row="2" CommandParameter="23"/>
<Button Style="{StaticResource DarkCell}" Grid.Column="7" Grid.Row="2" CommandParameter="24"/>
<Button Style="{StaticResource DarkCell}" Grid.Column="0" Grid.Row="3" CommandParameter="25"/>
<Button Style="{StaticResource LightCell}" Grid.Column="1" Grid.Row="3" CommandParameter="26"/>
<Button Style="{StaticResource DarkCell}" Grid.Column="2" Grid.Row="3" CommandParameter="27"/>
<Button Style="{StaticResource LightCell}" Grid.Column="3" Grid.Row="3" CommandParameter="28"/>
<Button Style="{StaticResource DarkCell}" Grid.Column="4" Grid.Row="3" CommandParameter="29"/>
<Button Style="{StaticResource LightCell}" Grid.Column="5" Grid.Row="3" CommandParameter="30"/>
<Button Style="{StaticResource DarkCell}" Grid.Column="6" Grid.Row="3" CommandParameter="31"/>
<Button Style="{StaticResource LightCell}" Grid.Column="7" Grid.Row="3" CommandParameter="32"/>
<Button Style="{StaticResource LightCell}" Grid.Column="0" Grid.Row="4" CommandParameter="33"/>
<Button Style="{StaticResource DarkCell}" Grid.Column="1" Grid.Row="4" CommandParameter="34"/>
<Button Style="{StaticResource LightCell}" Grid.Column="2" Grid.Row="4" CommandParameter="35"/>
<Button Style="{StaticResource DarkCell}" Grid.Column="3" Grid.Row="4" CommandParameter="36"/>
<Button Style="{StaticResource LightCell}" Grid.Column="4" Grid.Row="4" CommandParameter="37"/>
<Button Style="{StaticResource DarkCell}" Grid.Column="5" Grid.Row="4" CommandParameter="38"/>
<Button Style="{StaticResource LightCell}" Grid.Column="6" Grid.Row="4" CommandParameter="39"/>
<Button Style="{StaticResource DarkCell}" Grid.Column="7" Grid.Row="4" CommandParameter="40"/>
<Button Style="{StaticResource DarkCell}" Grid.Column="0" Grid.Row="5" CommandParameter="41"/>
<Button Style="{StaticResource LightCell}" Grid.Column="1" Grid.Row="5" CommandParameter="42"/>
<Button Style="{StaticResource DarkCell}" Grid.Column="2" Grid.Row="5" CommandParameter="43"/>
<Button Style="{StaticResource LightCell}" Grid.Column="3" Grid.Row="5" CommandParameter="44"/>
<Button Style="{StaticResource DarkCell}" Grid.Column="4" Grid.Row="5" CommandParameter="45"/>
<Button Style="{StaticResource LightCell}" Grid.Column="5" Grid.Row="5" CommandParameter="46"/>
<Button Style="{StaticResource DarkCell}" Grid.Column="6" Grid.Row="5" CommandParameter="47"/>
<Button Style="{StaticResource LightCell}" Grid.Column="7" Grid.Row="5" CommandParameter="48"/>
<Button Style="{StaticResource LightCell}" Grid.Column="0" Grid.Row="6" CommandParameter="49"/>
<Button Style="{StaticResource DarkCell}" Grid.Column="1" Grid.Row="6" CommandParameter="50"/>
<Button Style="{StaticResource LightCell}" Grid.Column="2" Grid.Row="6" CommandParameter="51"/>
<Button Style="{StaticResource DarkCell}" Grid.Column="3" Grid.Row="6" CommandParameter="52"/>
<Button Style="{StaticResource LightCell}" Grid.Column="4" Grid.Row="6" CommandParameter="53"/>
<Button Style="{StaticResource DarkCell}" Grid.Column="5" Grid.Row="6" CommandParameter="54"/>
<Button Style="{StaticResource LightCell}" Grid.Column="6" Grid.Row="6" CommandParameter="55"/>
<Button Style="{StaticResource DarkCell}" Grid.Column="7" Grid.Row="6" CommandParameter="56"/>
<Button Style="{StaticResource DarkCell}" Grid.Column="0" Grid.Row="7" CommandParameter="57"/>
<Button Style="{StaticResource LightCell}" Grid.Column="1" Grid.Row="7" CommandParameter="58"/>
<Button Style="{StaticResource DarkCell}" Grid.Column="2" Grid.Row="7" CommandParameter="59"/>
<Button Style="{StaticResource LightCell}" Grid.Column="3" Grid.Row="7" CommandParameter="60"/>
<Button Style="{StaticResource DarkCell}" Grid.Column="4" Grid.Row="7" CommandParameter="61"/>
<Button Style="{StaticResource LightCell}" Grid.Column="5" Grid.Row="7" CommandParameter="62"/>
<Button Style="{StaticResource DarkCell}" Grid.Column="6" Grid.Row="7" CommandParameter="63"/>
<Button Style="{StaticResource LightCell}" Grid.Column="7" Grid.Row="7" CommandParameter="64"/>
</Grid>
</Grid>
</Grid>
ViewModel
internal class ApplicationViewModel : INotifyPropertyChanged
{
public ObservableCollection<Board> MyBoard { get; set; }
private int xKnightPosition = 0;
private int yKnightPosition = 0;
private int[] lastSelectedCell = new int[2]; // первое значение х второе у
private int[,] myDesk = new int[8,8];
private bool moveLocker = true;
public ApplicationViewModel()
{
MyBoard = new ObservableCollection<Board>();
Board board = new Board { XPosition = 4, YPosition = 4, Desk = myDesk }; // задаём начальные значения
MyBoard.Insert(0, board);
CreateDesk();
}
public void CreateDesk()
{
for(int i = 0; i < 8; i++)
{
for(int j = 0; j < 8; j++)
{
myDesk[i, j] = 0;
}
}
myDesk[MyBoard[0].XPosition, MyBoard[0].YPosition] = 1;
}
void SelectedCell(object obj)
{
int position = Convert.ToInt32(obj);
xKnightPosition = 0;
yKnightPosition = 0;
bool flag = true;
while (flag == true)
{
if (position <= 8)
{
xKnightPosition = position - 1;
flag = false;
}
else
{
yKnightPosition++;
position -= 8;
}
}
}
public bool IsKnightSelected()
{
if (MyBoard[0].Desk[xKnightPosition, yKnightPosition] == 1)
return true;
else
return false;
}
public bool CanMove()
{
if (xKnightPosition == lastSelectedCell[0] - 1 && yKnightPosition == lastSelectedCell[1] - 2) // -1 -2
{
return true;
}
else if (xKnightPosition == lastSelectedCell[0] - 2 && yKnightPosition == lastSelectedCell[1] - 1) // -2 -1
{
return true;
}
else if (xKnightPosition == lastSelectedCell[0] - 2 && yKnightPosition == lastSelectedCell[1] + 1) // -2 +1
{
return true;
}
else if (xKnightPosition == lastSelectedCell[0] - 1 && yKnightPosition == lastSelectedCell[1] + 2) // -1 +2
{
return true;
}
else if (xKnightPosition == lastSelectedCell[0] + 1 && yKnightPosition == lastSelectedCell[1] + 2) // +1 +2
{
return true;
}
else if (xKnightPosition == lastSelectedCell[0] + 2 && yKnightPosition == lastSelectedCell[1] + 1) // +2 +1
{
return true;
}
else if (xKnightPosition == lastSelectedCell[0] + 2 && yKnightPosition == lastSelectedCell[1] - 1) // +2 -1
{
return true;
}
else if (xKnightPosition == lastSelectedCell[0] + 1 && yKnightPosition == lastSelectedCell[1] - 2) // +1 -2
{
return true;
}
else
return false;
}
private RelayCommand knightMove;
public RelayCommand KnightMove
{
set { knightMove = value; }
get { return knightMove ??
(knightMove = new RelayCommand(obj =>
{
SelectedCell(obj);
if (moveLocker == false)
{
if(CanMove() == true)
{
Board board = new Board { Desk = myDesk, XPosition = xKnightPosition, YPosition = yKnightPosition };
MyBoard.Insert(0, board);
CreateDesk();
}
moveLocker = true;
}
else if (IsKnightSelected() == true)
{
moveLocker = false;
MessageBox.Show("Knight is hear!");
}
lastSelectedCell[0] = xKnightPosition;
lastSelectedCell[1] = yKnightPosition;
})) ;
}
}
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged([CallerMemberName] string prop = "")
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(prop));
}
}