通过.NET中的某种接口使属性可用于数据绑定?

我有一个以特定方式实现属性的类,以处理业务逻辑系统的一些自定义需求。

这种“特定方式”使得属性在数据绑定的上下文中不可操作。 基本上,如果我将类的对象放到表单上,数据绑定在对象上找不到任何内容,并且该对象的属性检查器虽然列出了属性,但不允许我编辑它们。

我想知道的是,如果有一个接口或类似的东西,我可以在我的类中实现,它将向表单设计器报告可以绑定的属性,并实现代表数据绑定系统所需的自定义代码。我的财产。

请注意,我不需要在属性检查器中编辑对象的属性值,这只是属性非function性的一个示例。 我只需要数据绑定支持。

是否有这样的界面,如果是这样,它是什么?

我们举一个简单的例子。

我们假设我有这个课程:

public class CustomDataBinding : Component { private Dictionary _Properties = new Dictionary(); public CustomDataBinding() { _Properties["Property1"] = 10; _Properties["Property2"] = "Test"; } } 

有没有什么我可以对我的对象做什么,没有实际制作属性,这将为这两个“属性”添加数据绑定支持?

请注意,对于我的真实类,我知道每个属性的类型,因此如果它更容易,请将上面的代码更改为仅使用字符串值:

 public class CustomDataBinding : Component { private Dictionary _Properties = new Dictionary(); public CustomDataBinding() { _Properties["Property1"] = "Property1"; _Properties["Property2"] = "Property2"; } } 

我还需要validation支持,因为我们的类也可以报告每个属性的validation状态,但我已经实现了IDataErrorInfo和IDataValidationInfo,我认为它会给我这个。 我也实现了INotifyPropertyChanged,所以我想到了改变机制,但我需要发现并与属性交谈。 除了这些接口之外,我应该研究的任何其他内容都是受欢迎的信息。

这听起来像是在描述一个属性包; 这确实支持数据绑定,但您需要实现ICustomTypeDescriptorTypeDescriptionProvider 。 然后通过TypeDescriptor.GetProperties(obj)TypeDescriptor.GetProperties(type)定义可用属性 – 或者在列表的情况下,通过ITypedList 。 如果属性每个实例更改,则ICustomTypeDescriptor是合适的; TypeDescriptionProvider可以进行每种类型的自定义,并且可以使用BindingList类的东西而无需任何额外的工作。

棘手的是你需要定义每个属性的类型 – 如果你刚刚得到object那就不简单了。 这是一个非常简化的示例 ,它将所有属性视为字符串。 在此示例中,因为我们正在绑定列表,所以它使用ITypedList但不实现ICustomTypeDescriptor

请注意,对于PropertyGrid ,更简单的快捷方式是使用TypeConverter – 这允许您调整属性无需使用ICustomTypeDescriptorTypeDescriptionProvider – 请参阅示例 。

您可以始终将Dictionary作为属性公开并直接访问它的元素(尽管它需要通过索引并实现IListSourceIEnumerable

– 编辑

不过,我必须说,你正在有效地制作自己的无类型语言。 对此的原因感兴趣,也许有更好的方法……

由于您无法发布新属性,如何将Dictionary发布为ObservableDictionary 。 请参阅此DrWPF文章 。

然后,您可以使用key绑定到字典,以获取您所追求的命名属性。