我想列出 Listbox 控件中的项目。从抽象基类派生的项目。另外,我需要支持2路绑定。
名为“Animal”的基类。被称为“狗”和“猫”的继承类具有独特的属性。在列表框中更改所选项目时,我想预览派生项目的属性。
基类:
public abstract class Animal : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public string _Name { get; set; }
public virtual string Name { get; set; }
private int _Id;
public int Id
{
get
{
return _Id;
}
set
{
_Id = value;
OnPropertyChanged("Id");
}
}
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
}
}
狗类
public class Dog : Animal
{
public override string Name
{
get
{
return _Name;
}
set
{
_Name = value;
OnPropertyChanged("Name");
}
}
}
猫类
public class Cat : Animal
{
public override string Name
{
get
{
return _Name;
}
set
{
_Name = value;
OnPropertyChanged("Name");
}
}
private string _uniqueCatProp;
public string uniqueCatProp
{
get
{
return _uniqueCatProp;
}
set
{
_uniqueCatProp = value;
OnPropertyChanged("uniqueCatProp");
}
}
}
形式:
public Form1()
{
InitializeComponent();
BindingList<Animal> animals = new BindingList<Animal>();
Dog d1 = new Dog();
d1.Id = 1;
d1.Name = "dog1";
Dog d2 = new Dog();
d2.Id = 2;
d2.Name = "dog2";
Cat c1 = new Cat();
c1.Id = 3;
c1.Name = "cat1";
c1.uniqueCatProp = "clean";
animals.Add(d1);
animals.Add(d2);
animals.Add(c1);
BindingSource bs = new BindingSource();
bs.DataSource = typeof(Animal);
foreach (var item in animals)
{
bs.Add(item);
}
listBox1.DataSource = bs;
listBox1.DisplayMember = "Name";
listBox1.ValueMember = "Name";
Binding ctx1 = new Binding("Text", listBox1.DataSource, "Id", true, DataSourceUpdateMode.OnPropertyChanged);
textBox1.DataBindings.Add(ctx1);
Binding ctx2 = new Binding("Text", listBox1.DataSource, "Name", true, DataSourceUpdateMode.OnPropertyChanged);
textBox2.DataBindings.Add(ctx2);
当我添加以下行时,绑定被破坏:
Binding ctx3 = new Binding("Text", listBox1.DataSource, "uniqueCatProp", true, DataSourceUpdateMode.OnPropertyChanged);
textBox3.DataBindings.Add(ctx3);
我知道 Animal 基类中不存在属性“uniqueCatProp”,但是我认为我不应该在基类中添加另一个名为“uniqueCatProp”的虚拟属性。
需要你的帮助。