Используйте DisplayMember
, чтобы указать, какое поле использовать для отображения в ComboBox
.
Сделать accessList
readonly
, чтобы гарантировать, что вы никогда не создадите новый экземпляр списка.Если вы не сделаете это readonly
, это может привести к незначительной ошибке, если вы не переназначаете DataSource
всякий раз, когда вы заново создаете accessList
.
private readonly BindingList<UserAccess> accessList = new BindingList<UserAccess>();
public Form1()
{
InitializeComponent();
comboBox1.ValueMember = "AccessId";
comboBox1.DisplayMember = "Access";
comboBox1.DataSource = accessList;
}
private void button1_Click(object sender, EventArgs e)
{
accessList.Add(new UserAccess { AccessId = 1, Access = "Test1" });
accessList.Add(new UserAccess { AccessId = 2, Access = "Test2" });
}
Если вам нужно иметь возможностьизмените свойства элементов в accessList (например, accessList[0].Access = "Test3"
) и просмотрите изменения, отраженные в пользовательском интерфейсе, вам нужно реализовать INotifyPropertyChanged
.
Например:
public class UserAccess : INotifyPropertyChanged
{
public int AccessId { get; set; }
private string access;
public string Access
{
get
{
return access;
}
set
{
access = value;
RaisePropertyChanged("Access");
}
}
private void RaisePropertyChanged(string propertyName)
{
var temp = PropertyChanged;
if (temp != null)
temp(this, new PropertyChangedEventArgs(propertyName));
}
public event PropertyChangedEventHandler PropertyChanged;
}