繁体   English   中英

C#如何将数组绑定到按钮数组

[英]C# how to binding the array to the button array

我正在练习viewModel和数据绑定的结构。 我创建按钮并将它们添加到数组中,以便可以使用for循环轻松管理它们。 但是,似乎在绑定它们时我会犯一些错误。

这是我的代码:

public class MyForm : Form
{
    private ViewModel viewModel;
    private Button[] buttons;

    public MyForm (ViewModel viewModel)
    {
        this.viewModel = viewModel;
        InitializeComponent();

        buttons = new Button[]
        {
            button1, button2, button3, ...
        };

        for (int i = 0; i < buttons.Length; ++i)
        {
            buttons[i].DataBindings.Add("Text", viewModel, "ButtonText[" + i + "]");
        }
    }

    (...)
}

在我的ViewModel中

public class ViewModel
{
    private string[] buttonText;

    public string[] ButtonText
    {
        get
        {
            return buttonText;
        }
    }

    public ViewModel ()
    {
        buttonText = new string[]
        {
            "string1", "string2", "string3", ...
        };
    }

    (...)
}

当我运行它时,我得到一个ArgumentException

System.ArgumentException:'无法绑定到数据源上的属性或列“ ButtonText [0]”。 参数名称:dataMember'

我应该如何修改绑定以获得正确的程序行为? 提前致谢!

您不能绑定到属性的索引项。
如果您考虑基于反射的数据绑定,那么您将看到viewmodel没有名称为“ ButtonText [2]”的公共属性。 DataMember名称只是一个字符串,数据绑定将无法从那里检索索引。

相反,您可以为每个按钮拥有自己的属性,以对按钮的文本进行数据绑定。 并且仍然将其存储在循环中需要执行的其他逻辑中。

如果您具有动态按钮,则可以仅通过一个按钮列将按钮名称和操作的集合绑定到DataGridView

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM