[英]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.