我目前正在尝试使用WPF创建一个小型Battleship应用程序。有些人为此宣传了MVVM模式,所以我试了一下(我没有WPF或Forms的经验)。在一些初步问题之后,一切似乎都很顺利,但是现在我碰到了一堵我不知道如何突破的墙:
你可以想象,有一个战列舰“网格”(不要与WPF网格混淆,虽然我只是想知道我可以使用的东西也许......让我想一想,但答案是以下问题仍然让我感兴趣,我想在Canvas上画画。我之前没有MVVM就成功了,但我只是不知道如何用MVVM做到这一点。画布上绘制的“网格”应该包含始终绘制的内容,即11条水平线和11条垂直线,以及船只(可以包含任何形状,位于由交叉线)。我的BSGrid的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Battleship.Entities
{
public class BSGrid
{
public const int Size = 10;
// TileState is an enum consisting of Unchecked, Checked, ShipPart,...
private TileState[,] sea = new TileState[Size, Size];
public TileState this[BSPoint pos]
{
get { return sea[pos.x, pos.y]; }
set { sea[pos.x, pos.y] = value; }
}
public TileState this[int x, int y]
{
get { return sea[x, y]; }
set { sea[x, y] = value; }
}
public BSGrid()
{
}
}
}
关于如何将画布“内容”绑定到BSGrid的数据,您有什么建议吗?当我之前绘制它时,我只是通过了数组并画了一个矩形,如果瓷砖上有一个船舶部件或类似物。我当然可以将网格的一些数据提取到比如要绘制的矩形列表中,但我不知道这是否“好”并且仍然不知道如何从ViewModel中绘制一点都不我会很高兴任何建议: - )
答案 0 :(得分:0)
我通过创建自己的类
来实现这一目标public class BattleshipCanvas : Canvas
{
// ...
}
DependencyProperty
为BSGrid
,这是WPF中的“标准做法”,但我当时并不知道。