In this lesson, we will create a ViewModel. This is a class that will manage communication between the View (MainWindow.xaml) and the Models (currently, only Player.cs).
Using a ViewModel makes it easier to create automated tests (which we will do later), or create a different type of user interface (such as a web browser-based version of the game).
Summary
- A ViewModel is designed to manage how the Views and Models communicate with each other.
- We can use this class to manage different models. For example, when the player is in combat, we will need to manage a Player object and a Monster object.
- By having the extra class, we gain the ability to create automated tests. So, we won’t need to manually (and slowly) test our program.
- This also gives us the ability to easily create a different UI – to convert the program to a web game, or text game.
- In the Player class, the property datatypes are “string” and “int”.
- In this model class, we will use Player as the datatype for the CurrentPlayer property – because that property will hold a Player object.
- If a class uses a class in a different namespace, you need to include a “using” statement at the top of the class, so it can “use” the classes in the other namespace.
- When you need an object, you call the constructor on a class.
- This is like “filling in” the “blank form” of the class.
- If we don’t define a constructor, the class still automatically has a default constructor.
- We can use the constructor to perform additional steps, when the class is created. For example, setting property values.
- “Scope” is the visibility level of a class, property, or variable.
- For now, we will use “public” – the most-visible scope. In the future, we will reduce the scope of some properties.
- A single equal sign “=” is used when you want to assign a value to a variable, property, object, etc.
- The value on the right of the equal sign is evaluated, and assigned to the variable on the left of the equal sign.
Source Code
In the Engine project, right-click on “Engine”, and add a new folder named “ViewModels”.
Right-click on the ViewModels folder, and add a new class named “GameSession.cs”.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Engine.Models;
namespace Engine.ViewModels
{
public class GameSession
{
Player CurrentPlayer { get; set; }
public GameSession()
{
CurrentPlayer = new Player();
CurrentPlayer.Name = "Scott";
CurrentPlayer.Gold = 100000;
}
}
}
Modify Player.cs, to look like this:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Engine.Models
{
public class Player
{
public string Name { get; set; }
public string CharacterClass { get; set; }
public int HitPoints { get; set; }
public int ExperiencePoints { get; set; }
public int Level { get; set; }
public int Gold { get; set; }
}
}
NEXT LESSON: Lesson 03.5: Displaying the Player Object
PREVIOUS LESSON: Lesson 03.3: Creating the Player Class