Привязка 2d массива к сетке - PullRequest
       16

Привязка 2d массива к сетке

0 голосов
/ 16 февраля 2012

Я пытаюсь сделать небольшую игру на C # с использованием WPF. В одном из моих Modelclasses у меня есть Map, которая представляет собой 2D-массив, заполненный объектами Enumeration. Каждый из этих объектов представляет тип плитки.

В моем представлении эти плитки должны быть преобразованы в изображение, а для изображения должны быть установлены правильные координаты в сетке.

Как связать массив с сеткой или изображениями в представлении, чтобы он автоматически обновлялся при изменении массива?

Вот как это работает сейчас:

Перечисление, используемое для заполнения массива:

public enum Tile { FLOOR, WALL, DESTINATION, EMPTY }

Способ создания и размещения всех изображений (это в коде):

public void LoadMap(Map mapModel)
        {            
            Tile[,] tiles = mapModel.TileMap;

            int nRows = tiles.GetLength(1);
            int nCols = tiles.GetLength(0);

            for (int i = 0; i < nCols; i++)
            {
                ColumnDefinition col = new ColumnDefinition();               
                map.ColumnDefinitions.Add(col);
            }

            for (int i = 0; i < nRows; i++)
            {
                RowDefinition row = new RowDefinition();                
                map.RowDefinitions.Add(row);
            }            

            for (int y = 0; y < nCols; y++)
            {
                for (int x = 0; x < nRows; x++)
                {
                    Image img = new Image();
                    switch (tiles[y, x])
                    {
                        case Tile.FLOOR:
                            img.Source = _srcFloor;
                            break;

                        case Tile.WALL:
                            img.Source = _srcWall;
                            break;

                        case Tile.DESTINATION:
                            img.Source = _srcDestination;
                            break;

                        case Tile.EMPTY:
                            img.Source = _srcEmpty;
                            break;
                    }

                    img.SetValue(Grid.ColumnProperty, x);
                    img.SetValue(Grid.RowProperty, y);                                       

                    map.Children.Add(img);                    
                }
            }
        }

XAML:

<Grid Name="map">

</Grid>

А вот скриншот того, как это выглядит: sokoban screenshot

...