이것은 중복 질문 일 수 있지만 좋은 답변을 찾을 수 없습니다. Binding WinForms ListBox to object properties과 같은 모든 대답은 내 WinForm에서 작동하지 않습니다. 나는 설명 할 것이다.ListBox.SelectedItem to Property
나는 ListBox
에 나와있는 기업 목록을 가지고 있습니다. SelectedItem이 변경되면 내 모델의 속성이 업데이트됩니다. 그래서 나는 Firms 속성을 읽을 수 있습니다.
// 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
속성)에 다른 것들을 바인딩하고 그것들은 훌륭하게 작동합니다.
개인 회사 _firm = 새 회사(); – Schuere
내 생성자에 기본 회사를 추가했으며 setters를 수정했습니다. (Resharper의 기본 구현은 Equals 대 비교자를 생각하지 않았습니다.)하지만, 행운은 없습니다. –