Я сделал простую игру, в которой два игрока по очереди. Иногда вы можете сделать 2 или более поворотов. Все работает отлично, за исключением того, что я хочу показать, сколько поворотов каждый игрок сделал с помощью привязки.Связывание собственности в классе в другом классе в C# WPF
У меня есть страница gamePage, класс игры и класс игрока:
страница:
public partial class gamePage : Page
{
private Game game;
// konstruktor
public gamePage(string strPlayer1, string strPlayer2)
{
InitializeComponent();
Hrac player1= new Hrac(strPlayer1, 'R');
Hrac player2= new Hrac(strPlayer2, 'B');
this.game = new Game(player1, player2, width, height);
// binding
DataContext = game;
// etc...
}
// here is: mouse click - game.MakeAMove();
}
игры:
class Game : INotifyPropertyChanged
{
// binding
public event PropertyChangedEventHandler PropertyChanged;
// players
public Player player1;
public Player player2;
private Player activePlayer;
}
// konstruktor
public Game(Player player1, Player player2, int width, int height)
{
// init of players
this.player1 = player1;
this.player2 = player2;
this.activePlayer = player1;
}
public void MakeAMove()
{
activePlayer.Rounds++;
makeAChange("player1");
}
// binding - dle itNetwork
protected void makeAChange(string name)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(name));
}
игрока:
class Player : INotifyPropertyChanged
{
// binding
public event PropertyChangedEventHandler PropertyChanged;
private int rounds;
public int Rounds {
get { return rounds; }
set
{
rounds = value;
// Call OnPropertyChanged whenever the property is updated
OnPropertyChanged("Rounds");
}
}
public char Color { get; set; }
public string Name { get; set; }
public Hrac(string name, char color)
{
this.Name = name;
this.Color = color;
Rounds = 0;
}
public override string ToString()
{
return this.Name;
}
// binding - via MSDN
protected void OnPropertyChanged(string name)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}
}
}
XAML:
<TextBlock Name="tbPlayer1Rounds" Text="{Binding player1.Rounds}" />
Основном игроки по очереди, когда они щелкают, этот шаг будет и activePlayer будет еще один поворот (player1.Rounds), то игроки будут менять и так далее ... Как вы можете видеть, у меня есть попробовал много вещей. Сначала создайте обработчик событий в игре, а затем в самом игроке. Сделал их публичными. Ничего. Связывание не работает. Если у меня есть свойство в Game, вызываемое, например: int allRounds
и в MakeAMove()
Я бы увеличил это свойство + привязал его к textBlock, он работает! Но когда мне нужно связывать свойство в классе, которое находится в другом классе - Я не знаю, что делать, я ничего не нашел. Я делаю что-то неправильно?
PS: Конечно, есть еще код! Дело не в том, что я не хочу, чтобы вы знали, что я делаю, это просто бесполезно для привязки, и я не хочу, чтобы вы отвлекались от этой проблемы.
Edit: опечаток
Думаю, я пробовал это, но спасибо. Я попробую еще раз (я думаю, что в то время у меня не было eventHandler). – Stepan