我有一个用于存储我的数据的列表,我尝试将其项目绑定到网格,列表框,文本框等,但无法使其正常工作。这是我的代码
class Survey
{
public int Id { get; set; }
public string Desc{ get; set; }
public List<string> Choices { get; set; }
}
List<Survey> _surveyList = GetList();
BindingSource _bindingSourceSurveys = new BindingSource { DataSource=_surveyList};
dataGridView1.DataSource = _bindingSourceSurveys;
txtDesc.DataBindings.Add("Text", _bindingSourceSurveys, "Desc",false,DataSourceUpdateMode.OnPropertyChanged,string.Empty);
lstChoices.DataBindings.Add("DataSource" , _bindingSourceSurveys,"Choices" ,false,DataSourceUpdateMode.OnPropertyChanged, string.Empty);
现在我可以看到textBox上的dataGrid,selectedItem(在dataGrid上)Desc属性值上的项目,也可以从textBox更改Desc属性值。
如果我在我的selectedItem List Choices中添加一个新选项
(_bindingSourceSurveys.Current as Survey).Choices.Add("NewChoice");
注意:我无法添加到ListBox.Items,因为它提供了Exception,因为我对此控件的DataSource进行了绑定。
ListBox不显示新项目,如果我从dataGrid中选择一个不同的项目并转回来,我可以看到新添加的选项。
这是什么问题?这个代码是否正常,这是我第一次使用这个绑定工具。
答案 0 :(得分:2)
当元素发生变化时,您的数据源不会引发事件。一个简单的解决方法是将数据源从List更改为BindingList。