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

ang*_*son 1 c# data-binding interface

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

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

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

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

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

我们举一个简单的例子.

我们假设我有这门课程:

public class CustomDataBinding : Component
{
    private Dictionary<String, Object> _Properties = new Dictionary<String, Object>();

    public CustomDataBinding()
    {
        _Properties["Property1"] = 10;
        _Properties["Property2"] = "Test";
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

public class CustomDataBinding : Component
{
    private Dictionary<String, String> _Properties = new Dictionary<String, String>();

    public CustomDataBinding()
    {
        _Properties["Property1"] = "Property1";
        _Properties["Property2"] = "Property2";
    }
}
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*ell 5

这听起来像是在描述一个属性包; 这确实支持数据绑定,但您需要实现ICustomTypeDescriptorTypeDescriptionProvider.然后通过TypeDescriptor.GetProperties(obj)TypeDescriptor.GetProperties(type)- 或者在列表的情况下通过via定义可用属性ITypedList.ICustomTypeDescriptor如果属性每个实例更改,则是合适的; TypeDescriptionProvider可以进行每种类型的自定义,并可以处理诸如BindingList<T>没有任何额外工作之类的事情.

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

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