在Visual Studio 2010,.NET 4.0中创建一个WinForms应用程序,然后使用以下代码创建一个用户控件(来自 Project / Add User Control ... ):
public partial class UserControl1 : UserControl
{
private string _SelectedTable;
public string SelectedTable
{
get { return _SelectedTable; }
set { _SelectedTable = value; }
}
public UserControl1()
{
InitializeComponent();
DataBindings.Add("SelectedTable", listBox1, "SelectedValue");
listBox1.DataSource = new List<string>();
}
}
编译,将工具框中的控件添加到Form1
,再次编译并尝试关闭。它不会(对吧?)。为什么?
我可以采取一些措施来防止这种情况发生,例如将行DataBindings.Add("SelectedTable", listBox1, "SelectedValue");
更改为DataBindings.Add("SelectedTable", tablesListBox, "SelectedValue", false, DataSourceUpdateMode.Never);
,或删除InitializeComponent()
之后的任意两行。但是我想知道为什么会发生这种情况,或者至少是什么,一般来说我做错了什么,我打破的一般规则,所以我不再犯同样的错误。
答案 0 :(得分:1)
我认为应该是因为你从未说过SelectedValue的约束...
我改变了你的代码,它的工作原理如下:
Collection<Person> mylist = new Collection<Person>();
listBox1.DataSource = mylist;
listBox1.DisplayMember = "Name";
listBox1.ValueMember = "ID";
DataBindings.Add("SelectedTable", listBox1, "SelectedValue");
答案 1 :(得分:1)
显然这是某种验证问题...如果在用户控件上将CausesValidation
设置为false,则可以正常工作。不确定到底发生了什么......但是......
无论如何,如果您没有明确设置ValueMember
属性,SelectedValue
没有意义,则应使用SelectedItem
。我使用SelectedItem
代替SelectedValue
尝试了您的代码,它运行正常。