问题标签 [typedescriptionprovider]

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 回答
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 回答
1085 浏览

c# - TypeDescriptionProvider / HyperDescriptor 实现

我目前正在使用实现的数据集合填充我的 WPF 网格ITypedList,其中包含的实体实现ICustomTypeDescriptor。所有属性都是在运行时确定的。

我想实现HyperDescriptor以帮助提高性能,但该页面上的示例更多地指的是已知类型而不是运行时属性。

我认为我需要实现一个自定义GetProperties()方法或类似方法来告诉 HyperTypeDescriptor 它需要查看哪些属性,但不确定应该在哪里设置。我认为这并不难,但我显然错过了一些东西。

非常感谢任何提示!

0 投票
2 回答
2632 浏览

wpf - WPF 绑定到代理

我有许多实现自己的自定义更新通知的集合类。INotifyCollectionChanged将这些通知转换为代理类中的实现应该很容易。

INotifyPropertyChanged已经照顾好;这个问题只是关于收集代理。

因此,我正在寻找一种从 XAML 创建相对容易使用的代理的方法。对于子集合尤其如此。自定义集合类是无法修改(也无法派生)的库的一部分。也不可能用INotifyCollectionChanged兼容的等价物替换集合类型,因为数据更新代码不在我的控制范围内。

我更喜欢与 SL 一起使用的解决方案,但这不是严格的要求。

到目前为止,我认为以下方法是可行的:

  • 为添加属性TypeDescriptionProvider的集合类定义一个注册。Proxy这允许绑定路径点入代理。从 XAML 的角度来看,这个解决方案似乎是最简单的,但与 SL 不兼容。
  • 定义一个创建代理的值转换器。这将与 XAML 方面的更多工作一起工作。它应该适用于 SL。但是,如果路径上需要多次值转换,则可能需要“中间”视觉元素来保存值转换器结果。

我调查了ObjectDataProvider,但我认为它不能在这种情况下使用(代理创建方法必须对容器中的对象类型是通用的)。

关于这两种方法中哪一种更好或任何其他方法的任何建议?

0 投票
1 回答
271 浏览

c# - 将自定义 TypeConverter 限制为特定程序集

我定义了一个自定义TypeConverter和关联的自定义TypeDescriptionProviderTypeDescriptor以便在从 REST Web 服务(使用 ASP.NET Core)返回值时自动将我的类型转换为字符串。

但是,我现在注意到在我的应用程序的其他地方(例如,当我序列化 XML 以保存我的配置文件,或在 WPF 中加载 XAML 时)我的自定义TypeConverter正在被调用。

有没有办法限制我的自定义类型转换器/描述提供程序/描述符,以便它们仅在我的 Web 服务程序集中使用?


更多信息

我的内部对象没有使用[TypeConverter()]属性来指定要使用的类型转换器。

正如答案所暗示的,我正在使用 AutoMapper 进行从内部对象到数据传输对象的映射。AutoMapper 使用TypeDescriptor/TypeConverter将我的对象的属性自动映射到字符串。我希望这种行为只有AutoMapper 使用这个自定义类型转换器。

但是,类型转换器似乎是全局注册的:TypeDescriptor.AddProvider(customerProvider, myType)

我看不到将其限制为仅某些组件的方法。到目前为止,我唯一的想法是以某种方式使用GetComponentName()ICustomTypeDescriptor但这似乎总是null)或在单独的AppDomain. 还有其他解决方案吗?