将2d数组绑定到网格

时间:2012-02-16 18:40:52

标签: c# image binding grid multidimensional-array

我正在尝试使用WPF在C#中制作一个小游戏。在我的一个Modelclasses中,我有一个Map,它是一个用Enumeration对象填充的2D数组。这些对象中的每一个都代表一种瓦片。

在我的视图中,这些平铺需要转换为图像,并且图像需要设置为网格中的右侧坐标。

如何将数组绑定到网格或视图中的图像,以便在数组更改时自动更新?

现在这是如何运作的:

用于填充数组的枚举:

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

0 个答案:

没有答案