【发布时间】:2015-11-24 02:28:16
【问题描述】:
我看过很多关于数据库数据绑定的帖子,但没有一篇文章有助于将数据绑定到内存中的现有对象。我还查看了几个堆栈溢出帖子,人们说以下代码应该绑定了我的组合框上的属性:
projectData = new ProjectData();
this.parentTypeComboBox.DataSource = projectData.MobList;
this.parentTypeComboBox.DisplayMember = "MobType";
this.parentTypeComboBox.ValueMember = "MobType";
我的数据对象有各种属性的公共 getter/setter,我已经在类上添加了 INotifyPropertyChanged 接口,但到目前为止还没有将任何侦听器附加到事件中。从我读过的内容来看,这应该是我必须做的所有事情才能让控件绑定到我的数据对象。知道为什么当我的对象列表更改时我的组合框没有填充数据吗?
项目数据类:
public class ProjectData : INotifyPropertyChanged
{
public static string PROJECT_OUTPUT_DIRECTORY = "..\\";
private List<Mob> _mobList;
public List<Mob> MobList
{
get { return _mobList; }
set { _mobList = value; OnPropertyChanged("MobList"); }
}
public ProjectData()
{
MobList = new List<Mob>();
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
Mob 类:
//Snippet mob of class
public partial class Mob : IEquatable<Mob>, INotifyPropertyChanged
{
public Mob()
{
dataAttributeField = new List<MobDataAttribute>();
}
private List<MobDataAttribute> dataAttributeField;
private string mobTypeField;
private string parentTypeField;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute("DataAttribute")]
public List<MobDataAttribute> DataAttribute
{
get
{
return this.dataAttributeField;
}
set
{
this.dataAttributeField = value;
OnPropertyChanged("DataAttribute");
}
}
/// <remarks/>
[System.Xml.Serialization.XmlAttributeAttribute()]
public string MobType
{
get
{
return this.mobTypeField;
}
set
{
this.mobTypeField = value;
OnPropertyChanged("MobType");
}
}
}
【问题讨论】:
-
EDIT/UPDATE 我最终为我的列表使用了一个 BindingList,它实际上确实允许控件在将某些内容添加到列表时自动更新。我仍然设置数据源/成员/值,但现在我的控件正在自动更新。
-
^ 通过将方法附加到 ListChanged 事件:
void MobList_ListChanged(object sender, ListChangedEventArgs e) { this.parentTypeComboBox.DataSource = projectData.MobList; this.parentTypeComboBox.DisplayMember = "MobType"; this.parentTypeComboBox.ValueMember = "MobType"; }
标签: c# winforms object data-binding combobox