gpt4 book ai didi

c# - 绑定(bind)到界面并在基本界面中显示属性

转载 作者:太空狗 更新时间:2023-10-29 23:27:55 25 4
gpt4 key购买 nike

This question (及其答案)解释了为什么您不能轻松地将 DataGridView 绑定(bind)到接口(interface)类型并获取从基本接口(interface)继承的属性的列。

建议的解决方案是实现自定义 TypeConverter。我的尝试如下。但是,创建绑定(bind)到 ICamel 的 DataSource 和 DataGridView 仍然只会产生一列(驼峰)。我不认为我的转换器被 .NET 用来决定它可以看到 ICamel 的哪些属性。我做错了什么?

[TypeConverter(typeof(MyConverter))]
public interface IAnimal
{
string Name { get; set; }
int Legs { get; set; }
}

[TypeConverter(typeof(MyConverter))]
public interface ICamel : IAnimal
{
int Humps { get; set; }
}

public class MyConverter : TypeConverter
{
public override PropertyDescriptorCollection GetProperties(ITypeDescriptorContext context, object value, Attribute[] attributes)
{
if(value is Type && (Type)value == typeof(ICamel))
{
List<PropertyDescriptor> propertyDescriptors = new List<PropertyDescriptor>();
foreach (PropertyDescriptor pd in TypeDescriptor.GetProperties(typeof(ICamel)))
{
propertyDescriptors.Add(pd);
}
foreach (PropertyDescriptor pd in TypeDescriptor.GetProperties(typeof(IAnimal)))
{
propertyDescriptors.Add(pd);
}
return new PropertyDescriptorCollection(propertyDescriptors.ToArray());
}
return base.GetProperties(context, value, attributes);
}

public override bool GetPropertiesSupported(ITypeDescriptorContext context)
{
return true;
}
}

最佳答案

DataGridView 没有使用TypeConverterPropertyGrid 使用 TypeConverter

如果它与 DataGridView 等列表控件相关,则其他答案是错误的。

要在列表中提供自定义属性,您需要以下之一:

  • ITypedList 在数据源上
  • TypeDescriptionProvider 关于类型

两者都不是平凡的。

关于c# - 绑定(bind)到界面并在基本界面中显示属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1048570/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com