シンプルなゲームを作って、2人のプレーヤーが交代しました。場合によっては、2ターン以上かかることがあります。各プレイヤーが拘束力を持って何回転したかを表示したいのを除いて、すべてうまく動作します。C#WPFの別のクラスのクラスでのバインディングプロパティ
ページ:
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));
}
プレーヤー:
私はページgamePage、クラスのゲームやクラスプレーヤーを持っている
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}" />
Basiclyプレイヤーは、彼らがクリックしたときに、移動が起こるのだろうとactivePlayerは、1以上のターン(player1.Rounds)を持つことになります、そしてプレイヤーが入れ替わりますし、あなたが見ることができるようにように... は、私が持っている、ターンを取りますたくさんのことを試しました。まずゲームでイベントハンドラーを作ってから、プレーヤー自身でイベントハンドラーを作ります。それらを一般に公開しました。何もない。バインディングは機能しません。私はゲームでプロパティを持っている場合:int allRounds
とMakeAMove()
私はそのプロパティを増やす+ textBlockにバインドする、それは動作します!しかし、私がする必要があるとき別のクラスにあるクラスのプロパティをバインド - 私は何をすべきかわからない、私は何も見つかりませんでした。私は何か間違っているのですか?
PS:もちろんコードがあります!私はあなたが何をしているのかを知りたくないというわけではなく、拘束力がないだけで問題から気をそらさないようにしています。
編集:タイプミス
私はそれを試みたと思うが、ありがとう。私はもう一度試してみます(私は、その時にイベントハンドラを持っていなかったと思います)。 – Stepan