[英]Binding property in class in another class in C# WPF
我做了一个简单的游戏,两个玩家轮流玩。 有时,您可以转2次或更多。 一切正常,除了我想显示每个玩家通过绑定进行了多少回合。
我有页面gamePage,类Game和Class Player:
页:
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:当然还有更多代码! 这并不是说我不想让您知道我在做什么,这对绑定没有用,我也不想让您分心。
编辑:错别字
将player1
为属性而不是字段。 Binding
可以遵循属性而不是字段的路径。
public Player player1{ get; set; }
但是,由于它是一个属性,因此您可能要更改名称的拼写...
好的,就像@wkl所说的那样,让玩家拥有属性而不是领域是一种解决方案。 我已经在类Player
等的属性Rounds
中尝试过...但是这样做:
public Player Player1 { get; set; }
public Player Player2 { get; set; }
在我心中没有发生。 Ofc对player2
这样做将使两个玩家都能实现。
谢谢!
编辑:我现在不需要类Player
eventHandler
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.