二维整数数组自定义依赖项属性绑定不起作用

绑定源

    private int[,] _map = new int[22,12] 
    {
        { 1,1,1 },{ 1,};
    public int[,] Map
    {
        get => _map;
        set => SetProperty(ref _map,value);
    }

DependencyProperty

public static readonly DependencyProperty MapArrayProperty =
        DependencyProperty.Register
        (
            "MapArray",typeof(int[,]),typeof(MapControl),new PropertyMetadata
            (
                null,new PropertyChangedCallback(MapArrayChanged)
            )
        );

    private static void MapArrayChanged(DependencyObject d,DependencyPropertyChangedEventArgs e)
    {
        MapControl map = (MapControl)d;
        map.MapChanged();
    }

    public int[,] MapArray
    {
        get
        {
            return (int[,])Getvalue(MapArrayProperty);
        }
        set
        {
            Setvalue(MapArrayProperty,value);
        }
    }

    private void MapChanged()
    {
        for(int i = 0; i<MapArray.GetLength(0); i++)
        {
            for(int j = 0; j<MapArray.GetLength(1); j++)
            {
                Grid grid = new Grid();
                grid.Background = ColorSeletor(MapArray[i,j]);
                Grid.SetRow(grid,i);
                Grid.SetColumn(grid,j);
                GridMap.Children.Add(grid);
            }
        }
    }

开始按钮绑定源

    public ICommand StartCommand
    {
        get;
        set;
    }
    private void RandomBlockSelector()
    {
        IDefaultBlock defaultBlock = null;
        Random r = new Random();
        int selectedblock = r.Next(2,9);
        switch (selectedblock)
        {
            case 2:
                defaultBlock = new IBlock();
                break;
            case 3:
                defaultBlock = new JBlock();
                break;
            case 4:
                defaultBlock = new LBlock();
                break;
            case 5:
                defaultBlock = new OBlock();
                break;
            case 6:
                defaultBlock = new SBlock();
                break;
            case 7:
                defaultBlock = new TBlock();
                break;
            case 8:
                defaultBlock = new ZBlock();
                break;
        }
        InsertBlock(defaultBlock.BlockArray);
    }

    private void InsertBlock(int[,] blockShape)
    {
        for(int i = 4; i<8; i++)
        {
            for(int j = 1; j<5; j++)
            {
                Map[i,j] = blockShape[i - 4,j - 1];
            }
        }
    }

    private void Start()
    {
        RandomBlockSelector();
    }

如果我启动应用程序,则绑定正在工作

二维整数数组自定义依赖项属性绑定不起作用

但是如果我单击按钮,则绑定不起作用 我认为当我单击按钮以修改数组时 必须修改数组和属性更改事件 必须改变视图

如果还有其他方法来绑定2D数组,请告诉我 要么 你能在我的代码中找到错误吗

二维整数数组自定义依赖项属性绑定不起作用

二维整数数组自定义依赖项属性绑定不起作用

这是单击按钮后如果在视图中应该显示的内容

s13766553829 回答:二维整数数组自定义依赖项属性绑定不起作用

首先免责声明:

WPF,Windows窗体和其他桌面应用程序格式不是用于游戏开发的正确工具。正确的工具是任何带有game loop的工具。 XNA的版本过时,但是有可能的current frontends的完整列表。

问题在于,如果集合值发生更改,则您的集合没有“更改”通知。您需要的是ObservableCollection或其他“为WPF制造”的集合。 ObservableCollection<int>[]-一个ObservableCollection实例数组-可能是您正在寻找的机器人。但是ObservableCollection<ObservableCollection<int>>可能是一个更好的选择(您可能希望使用别名来使这些类型保持可读性。)

本文链接:https://www.f2er.com/2908970.html

大家都在问