这可能是一个重复的问题,但我无法找到一个好的答案。所有的答案如Binding WinForms ListBox to object properties都不适用于我的WinForm。我会解释。绑定ListBox.SelectedItem属性
我有一个公司名单,我在ListBox
显示。我希望SelectedItem发生更改时,它会更新模型上的属性。这样我可以阅读公司的财产。
// the classes
public class Firm
{
public string Name { get; set; }
public int Id { get; set; }
// more properties ...
}
public class MyModel : INotifyPropertyChanged
{
private Firm _firm = new Firm();
public Firm Firm
{
get { return _firm; }
set
{
if (Equals(value, _firm)) return;
_firm = value;
OnPropertyChanged();
}
}
// more properties and OnPropertyChanged() ...
}
// the form
private MyModel Model;
public void MyForm(List<Firm> firms)
{
lstFirm.DataBindings.Add("SelectedItem", Model, "Firm",
true, DataSourceUpdateMode.OnPropertyChanged);
lstFirm.DisplayMember = "Name";
lstFirm.ValueMember = "Id";
lstFirm.DataSource = firms;
}
public void lstFirm_SelectedIndexChanged(object sender, EventArgs e)
{
// Do something with Model.Firm
}
问题是Model.Firm null
是。有人知道我需要做什么来在ListBox
和Model
之间进行数据绑定吗?我绑定我的WinForm上的其他东西(如TextBoxes
到String
属性)和那些很好地工作。
private firm _firm = new Firm();也是一个有效的解决方案 – Schuere
我已经向我的构造函数添加了一个默认公司,并且我修改了这些设置器。 (默认的Resharper实现,没有考虑Equals vs comparer。)但是,allas,没有运气。 –