Data Templates and Styles
Let's imagine that we want to implement a variant of tic-tac-toe
that's more fun to play (an important feature in most games). For
example, one variant of tic-tac-toe only allows players to have three of
their pieces on at any one time, dropping the first move off when the
fourth move is played, dropping the second move when the fifth is
played, and so on. To implement this variant, we need to keep track of
the sequence of moves, with each move represented by a PlayerMove
object, as shown in Example 8-19.
Example 8-19. A custom type suitable for tracking tic-tac-toe moves
public class PlayerMove
: INotifyPropertyChanged { string playerName; public string PlayerName { get { return playerName; } set { if( string.Compare(playerName, value) == 0 ) { return; } playerName = value; Notify("PlayerName"); } } int moveNumber; public int MoveNumber { get { return moveNumber; } set { if( moveNumber == value ) { return; } moveNumber = value; Notify("MoveNumber"); } } bool isPartOfWin = false; public bool IsPartOfWin { get { return isPartOfWin; } set { if( isPartOfWin == value ) { return; } isPartOfWin = value; Notify("IsPartOfWin"); } } public PlayerMove(string playerName, int moveNumber) { this.playerName = playerName; this.moveNumber = moveNumber; } // INotifyPropertyChanged Members public event PropertyChangedEventHandler PropertyChanged; void Notify(string propName) { if( PropertyChanged != null ) { PropertyChanged(this, new PropertyChangedEventArgs(propName)); } ...
Get Programming WPF, 2nd Edition now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.