Windows Forms组合框 - 绑定到多个属性

4

我在数据绑定Combobox的SelectedValue和Text属性时遇到了问题。以下是相关的代码片段:

DataTable dt1 = DataAccess.GetLoanPurposes();
ddLoanPurpose.DisplayMember = "Name";
ddLoanPurpose.ValueMember = "Value";
ddLoanPurpose.DataBindings.Add("Text", _scenario, "LoanPurposeString", false);
ddLoanPurpose.DataBindings.Add("SelectedValue", _scenario, "LoanPurpose", false);            
ddLoanPurpose.DataSource = dt1;

我可以将数据绑定到文本(Text)或已选择的值(SelectedValue),并且一切都正常。但当我尝试同时绑定两者时就会有问题。只有第一个数据绑定起作用(例如上面的示例中将 LoanPurposeString 绑定到 Text)。如果我改变数据绑定的顺序...

ddLoanPurpose.DataBindings.Add("SelectedValue", _scenario, "LoanPurpose", false);
ddLoanPurpose.DataBindings.Add("Text", _scenario, "LoanPurposeString", false);

...然后我失去了Text与LoanPurposeString的绑定,但现在SelectedValue绑定到了LoanPurpose。所以我的问题有两个方面:为什么这两个绑定都没有与我的_scenario对象连接起来,而且为什么顺序很重要?


你试图通过绑定“Text”属性来实现什么?你不需要它。ddLoanPurpose.DataBindings.Add("Text", _scenario, "LoanPurposeString", false); - Jacob Seleznev
1个回答

3
绑定两个不同的属性似乎不被支持(至少根据我的研究是这样)。在这种情况下,最好的解决方案是将我的_scenario对象中的单独属性(LoanPurpose和LoanPurposeString)合并为一个KeyValuePair属性。
public KeyValuePair<string, string> LoanPurpose { get; set; }

我只需要确保DataSource中的ValueMember变量是一个KeyValuePair。所以类似于...
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("Name", typeof(string)));
dt.Columns.Add(new DataColumn("Value", typeof(KeyValuePair<string, string>)));
DataRow dRow = dt.NewRow();
dRow["Name"] = "Eric";
dRow["Value"] = new KeyValuePair<string, string>("1", "Eric");
dt.Rows.Add(dRow);

绑定语法与我最初的问题相同,唯一的区别是ValueMember现在是一个KeyValuePair对象而不是一个字符串。
ddLoanPurpose.DisplayMember = "Name";
ddLoanPurpose.ValueMember = "Value";
ddLoanPurpose.DataSource = dt;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接