我一直都知道DisplayMember和ValueMember只能在使用DataSource属性对ComboBox进行数据绑定时使用。
但在某些代码中,我正在维护我已经注意到使用ComboBox'DisplayMember
属性 无需数据绑定。设置属性可确定组合框中显示的内容。设置ValueMember
似乎不起作用(它没有设置SelectedValue
)。
我的问题是:使用这种行为是否安全?或者,在即将发布的.NET版本中,行为可能会发生变化吗?
我知道你通常会覆盖ToString
方法。在实际代码中,MyType类并不像我的例子那么简单。我不确定覆盖其ToString
方法是否安全。
显示此行为的小样本。
using System;
using System.Windows.Forms;
internal class Program {
public class MyType {
public string MyText { get; set; }
public string MyValue { get; set; }
}
public class MyForm : Form {
private readonly ComboBox _myComboBox;
public MyForm() {
_myComboBox = new ComboBox {DisplayMember = "MyText", ValueMember = "MyValue"};
_myComboBox.Items.Add(new MyType {MyText = "First item", MyValue = "1"});
_myComboBox.Items.Add(new MyType {MyText = "Second item", MyValue = "2"});
_myComboBox.SelectedIndexChanged += _myComboBox_SelectedIndexChanged;
Controls.Add(_myComboBox);
}
private void _myComboBox_SelectedIndexChanged(object sender, EventArgs e) {
var cb = (ComboBox) sender;
System.Diagnostics.Debug.WriteLine(
"Index: {0}, SelectedValue: {1}", cb.SelectedIndex, cb.SelectedValue);
}
}
private static void Main() {
Application.Run(new MyForm());
}
}