Вместо этого вы можете использовать BindingSource для синхронизации ваших объектов.
// first binding source that points to your List of Foos
BindingSource bindingSourceFoos = new BindingSource();
bindingSourceFoos.DataSource = foos;
// create a second binding source that references the first's Bars property
BindingSource bindingSourceBars = new BindingSource(bindingSourceFoos, "Bars");
// set DisplayMember to the property in class Foo you wish to display in your listbox
fooListBox.DisplayMember = "FooName"; // my example, replace with actual name
fooListBox.DataSource = bindingSourceFoos;
// again, set DisplayMember to the property in Bar that you want to display in ListBox
barListBox.DisplayMember = "BarInfo"; // my example, replace with actual name
barListBox.DataSource = bindingSourceBars;
Итак, с этого момента, когда вы нажимаете на что-то в FooListBox, оно автоматически изменитсясодержимое BarListBox для этой коллекции Foo's Bar.
Обновление:
MSDN - привязка данных к пользовательскому элементу управления
Эта ссылка должна рассказать вам всевам нужно знать, но на всякий случай:
Украсьте свой пользовательский элемент управления следующим образом:
[System.ComponentModel.LookupBindingProperties
("DataSource", "DisplayMember", "ValueMember", "LookupMember")]
public partial class FooSelector : UserControl, INotifyPropertyChanged
Добавьте эти элементы в свой пользовательский элемент управления:
public object DataSource
{
get
{
return fooListBox.DataSource;
}
set
{
fooListBox.DataSource = value;
}
}
public string DisplayMember
{
get { return fooListBox.DisplayMember; }
set { fooListBox.DisplayMember = value; }
}
public string ValueMember
{
get { return fooListBox.ValueMember; }
set
{
if ((value != null) && (value != ""))
fooListBox.ValueMember = value;
}
}
public string LookupMember
{
get
{
if (fooListBox.SelectedValue != null)
return fooListBox.SelectedValue.ToString();
else
return "";
}
set
{
if ((value != null) && (value != ""))
fooListBox.SelectedValue = value;
}
}
Изатем, как и в моем исходном примере, вы связываете так же, как если бы вы связывались с обычным списком:
// fooSelector1 is your FooSelector user control
fooSelector1.DisplayMember = "Name";
fooSelector1.DataSource = bindingSourceFoos;