T が A インターフェイスを拡張するインターフェイスである BindingList にこだわっています。この bindingList をバインディングで使用すると、T からのプロパティのみが表示され、継承された A インターフェイスからのプロパティは表示されません。なぜそれが起こっているのですか?.net のバグのようです。これは、2 つのプロジェクトで共通の機能を共有するために必要でした。また、PropertyChanged イベントが baseImplementation からトンネリングされると、バインディング リストの PropertyDescriptor が空になります。添付されたインターフェースと実装。最後にSetUpメソッド
interface IExtendedInterface : IBaseInterface
{
string C { get; }
}
interface IBaseInterface : INotifyPropertyChanged
{
string A { get; }
string B { get; }
}
public class BaseImplementation : IBaseInterface
{
public string A
{
get { return "Base a"; }
}
public string B
{
get { return "base b"; }
protected set
{
B = value;
OnPropertyChanged("B");
}
}
protected void OnPropertyChanged(string p)
{
if (PropertyChanged != null)
PropertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(p));
}
public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
}
public class ExtendedImplementation : BaseImplementation, IExtendedInterface
{
public string C
{
get { return "Extended C"; }
}
}
private void SetupData()
{
BindingList<IExtendedInterface> list = new BindingList<IExtendedInterface>();
list.Add(new ExtendedImplementation());
list.Add(new ExtendedImplementation());
dataGridView1.DataSource = list;
}