问题标签 [typedescriptor]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1308 浏览

data-binding - 绑定 IList不显示 IMyInterface 继承的接口的成员

我将 IList 绑定到 GridView。IMyInterface 看起来像

我将一个实例绑定到这样的网格:

当将此绑定到网格时,网格中显示的唯一成员是 IMyInterface 的直接成员:GoalStartDate 和 GoalEndDate。

这是为什么?如何让网格显示它继承的其他接口的成员?

更新 继承的接口定义简单的数据属性,如

有一个实现IMyInterface的类:

这些被转换为 IMyInterface,并在我绑定到 GridView 的列表中返回。

0 投票
2 回答
5730 浏览

c# - TypeDescriptor.GetProperties(thisType) 返回属性,这是只写的

我试图从一个类型中获取所有属性,但是使用 TypeDescriptor.GetProperties(thisType) 只会为我提供属性,它同时具有 setter 和 getter。我有只写属性。有没有办法检索包括这些在内的 PropertyDescriptorCollection?

/阿斯格

0 投票
1 回答
6897 浏览

c# - 将类别属性添加到 PropertyDescriptor

我有一组自定义的 PropertyDescriptor,我也想添加类别,以便它们在 PropertyGrid 中以更有条理的方式显示。我希望每种类型的 PropertyDescriptor 进入一个特定的类别。

我尝试使用 TypeDescriptor.AddAttributes() 将属性添加到现有的 PropertyDescriptor,但未添加类别属性。

我还尝试在构造函数中为我的一个 PropertyDescriptor 使用 TypeDescriptor.AddAttributes(),如下所示。但它也不起作用。

我宁愿不花时间详细说明我为什么要做我正在做的事情。但在上面的示例中,IntrinsicPropertyDef 是一个定义属性的类,包括名称、显示名称和类型。所以 propDef.Attributes 包括 DisplayNameAttribute。

可以使用两个不同的自定义 PropertyDescriptor IntrinsicPropertyDescriptor 和 InferedIntrinsicPropertyDescriptor 来显示 IntrinsicPropertyDef。每个 IntrinsicPropertyDescriptor 都应该有一个类别属性“Intrinsic Properties”,每个 InferedIntrinsicPropertyDescriptor 都应该有一个类别属性“Inferred Intrinsic Properties”。

0 投票
1 回答
3104 浏览

c# - TypeDescriptor.CreateProperty 不添加属性

我正在尝试使用 TypeDescriptor.CreateProperty 将属性添加到类型中,以便在属性网格中显示其他属性,但是未添加此新属性,并且当我在该类型上调用 TypeDescriptor.GetProperties 以检查属性时,此属性不存在。

我可能会遗漏或忽略某些东西吗?据我所知,这是一个基本而简单的场景。

这是调用:TypeDescriptor.CreateProperty(typeof (MovieMenuItem), "ExternalMediaLocation", typeof (string), null);

0 投票
0 回答
1735 浏览

vb.net - 如何从类型中删除 TypeConverter 属性?

我正在重申这个问题以总结我已经发现的内容:

我有一个测试 TypeConverter,(MyConverter),对于 ConvertToString,无论输入是什么,它都会输出“Converted To String”。

为了确保 GetConverter 为 Int32 拾取这一点,我添加了以下行:

下一个:

下一个:

然而:

似乎第 (2) 行正在创建一些其他的关联,它没有被 RemoveProvider 删除,因为 RemoveProvider 在该行之前工作,但不是在之后。

此外,在第 (4) 行和第 (5) 行之间,如果我执行 TypeDescriptor.GetAttributes(GetType(Int32)),则 TypeConverterAttribute 已按预期被删除。

呻吟……又是一个 ETA。

如果在第 (1) 行之前添加...

然后在第(4)行之后我添加......

有用。但是在我删除了我的自定义提供程序之后,原始提供程序应该是堆栈中的下一个。

预计到达时间。我想我已经搞定了。

忽略关于重新添加 OriginalProvider 的最后一条评论。相反,在第 (4) 行之后,添加...

出于某种原因,Remove 之后没有调用 Refresh。

如果您在类型的 Nullable 上使用了 GetConverter,则还需要刷新可为空的。所以如果我说:

删除提供程序后,我需要输入:

----原始问题----

为了强制可空类型使用自定义转换器,我添加了一个 TypeConverterAttribute 行:

这样,以下行将使用 MyConverter 作为底层转换器选择一个可为空的转换器:

但是,一旦完成,我就看不到将 MyConverter 与 Int32 解除关联的方法,因为没有 TypeDescriptor.RemoveAttribute。

有任何想法吗?

预计到达时间:

好的,我已经成功了一半。

我发现 TypeDescriptor.AddAttributes 返回一个 TypeDescriptionProvider 然后我可以删除它。但是,它没有按预期工作。

这有效:

正如预期的那样,原始转换器被拾取,而 MyConverter 被忽略。

但是,这不起作用:

在 RemoveProvider 之后,GetConverter 仍然拾取 MyConverter - 只是因为我在原始 GetConverter 之后移动了它!

再一次,有什么想法吗?

ETA2:

我已经通过在 GetConverter 方法上指定 noCustomTypeDesc 标志来解决问题,但我仍然想知道发生了什么。

删除提供程序后,我使用 TypeDescriptor.GetAttributes(GetType(Int32)) 列出所有属性,TypeConverterAttribute 确实消失了,但 GetConverter 继续获取 MyConverter。

0 投票
2 回答
1564 浏览

.net - 使用 TypeDescriptor 为 PropertyGrid 动态添加属性级属性

我想在网格中显示时动态添加属性(如 Browsable(false))。场景是我有一个带有一些公共属性的自定义类。但是,我不希望所有公共属性都显示在 UI 中。有出路吗?

我尝试使用 TypeDescriptor。但是,它仅适用于类型级别,而不适用于属性级别。我找不到任何关于如何在属性级别使用它的帮助。

任何指针将不胜感激。

0 投票
3 回答
20266 浏览

c# - TypeDescriptor.GetProperties() 与 Type.GetProperties()

考虑以下代码。

我试图了解 A 和 B 之间的区别。据我了解,TypeDescriptor.GetProperties()将返回自定义TypeDescriptor属性,而Type.GetProperties()将仅返回对象的内在“真实”属性。这是正确的吗?如果 obj 没有任何自定义TypeDescriptor属性,那么它只是默认返回对象的字面内在属性。

0 投票
2 回答
2140 浏览

c# - 根据声明的类过滤 TypeDescriptor.GetProperties() 返回的属性

大家好。我有以下情况。

我想使用 TypeDescriptor 来获取某种类型的属性。继承层次结构中类型的深度可能会有所不同。我只想获取在类型本身而不是在其父级(基)中声明的属性。问题是,当我调用 TypeDescriptor.GetProperties() 时,它会将继承层次结构中声明的所有内容返回到 Object。

我只看到我可以按属性过滤输出,但我不想仅仅为此向我的类型中的属性添加另一个属性。让它们通过反射而不使用 TypeDescriptor 会做我想要的,但不是我的选择,因为某些属性将在某个时候动态添加到类型中。

有任何想法吗?如果问题不清楚,我可以提供一个例子。

0 投票
2 回答
1828 浏览

c# - 如何避免为每个类使用单独的自定义 TypeDescriptorProvider?

我在我的项目中添加了允许用户将他们自己的自定义属性添加到对象的功能。我已经创建了我自己的自定义TypeDescriptorPropertyDescriptorTypeDescriptorProviders等等..等等..来做到这一点。

这是我的问题。现在我已经完成了所有工作,但是必须为每个可以具有自定义属性的对象对象类型创建一个单独的TypeDescriptionProvider 。这是我的TypeDescriptionProviders的样子

因此,我的每个自定义TypeDescriptionProviders通过将特定类型的默认TypeDescriptionProvider传递给base(TypeDescriptionProvider parent)基本构造函数来调用它。

GetTypeDescriptor()方法调用base.GetTypeDescriptor()来获取默认描述符,然后我的自定义类型描述符使用该描述符添加自定义属性。

有没有办法将这些组合成一个具有相同功能但不绑定到特定类型的通用自定义TypeDescriptionProvider ?我是否可以跳过在构造函数中提供父TypeDescriptionProvider但稍后在我明确知道正在查询什么类型的对象时在GetTypeDescriptor()方法中设置它?还是有其他方法可以获取类型的默认描述符,然后调用base.GetTypeDescriptor(Type t,object ins)方法?

0 投票
1 回答
3911 浏览

c# - C#:TypeDescriptor.GetAttributes() 和 GetType() .GetCustomAttributes 有什么区别?

拿这两个代码的东西:

如果类看起来像:

哪里RequiredIfOtherPropertyIsNotEmpty是 aValidationAttributeAllowMultiple = true

第一个返回两个属性,第二个返回一个。

有什么区别会导致这种情况?