问题标签 [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 投票
1 回答
1085 浏览

c# - TypeDescriptionProvider / HyperDescriptor 实现

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

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

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

非常感谢任何提示!

0 投票
2 回答
6621 浏览

c# - 以编程方式将属性添加到方法或参数

我可以使用 TypeDescriptor.AddAttributes 在运行时向类型添加属性。如何对方法和参数执行相同操作?(也许是 2 个单独的问题......)

0 投票
1 回答
2372 浏览

c# - 使用反射/ TypeDescriptor 设置匿名类型属性的值是否可能?

我尝试使用 TypeDescriptor 并且值没有改变,并且通过反射我得到一个错误,即该属性没有设置器

0 投票
1 回答
934 浏览

vb.net - VB.NET 动态自定义类型描述符

我正在玩弄一个想法(以前从未使用过 TypeDescriptors),并设法让它很好地工作。但我担心我在小实验中做出的一些“最佳实践”决定。

我使用一个 CustomTypeDescriptor,它从其 PropertyDescriptor 接收一个事件,指示值正在更改或被查询。

每次调用 GetTypeDescriptor 时,TypeDescriptorProvider 都会生成一个全新的 CustomTypeDescriptor 实例,然后它将 CustomTypeDescriptor 上的事件绑定到实例对象。

我不确定每次调用 GetTypeDescriptor 时是否生成一个新的 CustomTypeDescriptor 是否是一个好主意(即使我不得不这样做)。我也不确定直接从 CustomTypeDescriptor 绑定事件到实例对象是否有任何后果,特别是如果 CustomTypeDescriptor 是动态的。

你们有什么感想?我的提供者的示例代码如下:

0 投票
2 回答
2168 浏览

c# - InvalidCastException 将对象转换为自己的类型

我目前对我遇到的问题完全感到困惑。我正在为另一个提供公共 .NET API 的应用程序编写插件。我创建了一个名为的类Room,并使用 PropertyGrid 允许用户查看和编辑Room实例的属性。一些属性仅限于一组标准值。因此,我使用带有GetStandardValues()覆盖的自定义 TypeDescriptors 来获取属性网格以显示这些属性的下拉列表。

这一切都很好。我得到了下拉菜单,我可以编辑值没问题。然而现在由于某种原因,当我选择一个RoomPropertyGrid 时,将带有类型描述符的属性显示为一个黑框。

替代文字

如果我单击该框,它会变成白色,并且我会看到一个闪烁的光标,但我无法输入任何内容。如果我然后选择另一个房间,我的程序会崩溃,并出现以下异常:

堆栈跟踪中的最后一项指向我的 BuildingTypeConverter.GetStandardValuesSupported() 方法,如下所示。

现在,如果我在上面的第 14 行设置断点并尝试调试,调试器不会在断点处中断。此外,如果我在强制转换之前添加任意代码,来自 InvalidCastException 的堆栈跟踪似乎总是引用 GetStandardValues() 的第一行,无论它是什么。例如,我尝试了以下操作。

我仍然得到相同的 InvalidCastException。然而它是堆栈跟踪引用上面我初始化的第一行string s。此外,如果我尝试在第一行设置断点,它也不会被触发。

就像我之前说的那样,大约一天前它工作得很好。我什至尝试在我的 SVN 存储库中回滚到以前的版本。早在第一次修订时,我就创建了自定义类型描述符类,但仍然遇到InvalidCastExceptions. 有谁知道发生了什么?

0 投票
2 回答
794 浏览

c# - 是否可以在.Net 的编译时有条件地隐藏属性?

根据预处理器指令,我想将类中的所有属性设置为 EditorBrowsableAttribute.Never。

我想过创建一个从 EditorBrowsableAttribute 派生的自定义属性,但不幸的是该类是密封的。

我看过 ICustomTypeDescriptor,但在 GetProperties 方法中,我可以获取每个属性描述符,但属性集合是只读的。

有任何想法吗?

0 投票
2 回答
5051 浏览

c# - TypeDescriptor.AddAttributes() 替换当前属性而不是添加它

我有这部分代码:

它有两个问题:

  1. 出于某种原因 OfType 返回一个空的 IEnumerable 尽管它应该返回该类型的正确属性,我检查了。它们存在。
  2. 这是严重的问题。它不添加属性,而是用 crmTypeAttribute 替换相同类型的旧属性。我已将 AllowMultiple 标记为 true。

谁能告诉我这段代码有什么问题?
编辑:
由于某种原因,它只允许添加属性类型的一个属性,我在运行时添加了另一种属性类型并且它有效。

0 投票
2 回答
1135 浏览

c# - TypeDescriptor 不从继承的接口返回成员

我的问题是 TypeDescriptor 不会从继承的接口返回成员,这是它应该如何工作的吗?或者它是一个错误?

0 投票
1 回答
493 浏览

wpf - WPF,如何在观看 TypeDescriptor 时正确取消挂钩处理程序

我正在使用 WPF,并尝试遵循 MVVM 模式。我们的团队已决定使用 Xceed DataGrid 控件,但我在使其适应 MVVM 模式时遇到了一些困难。

我必须满足的一个要求是我需要知道用户何时更改了网格上的列过滤器。我知道最新版本的 DataGrid 控件有一个为此引发的事件,但不幸的是,我必须使用旧版本的控件。

找了一阵子,找到了这个帖子。它说我需要将 INotifyCollectionChanged 处理程序连接到每个可能的过滤器列表。这行得通,但它也表示,每当网格的行源发生变化时,我都需要解除处理程序的挂钩。

当我在页面的代码隐藏中显式设置行源时,我能够让它工作(并且在我第一次尝试在 ModelView 中使用对视图喘气的直接引用!

不过,我遇到的第一个问题是如何在没有代码背后或 ViewModel 中的逻辑的情况下做到这一点。我的解决方案是扩展 DataGridControl 类并添加以下代码:

这导致我的下一个问题;我很确定在调用 ItemsSourceChanged 方法时,AutoFilterValues 的集合已经改变,所以我无法有效地解开处理程序。

我这样假设是对的吗?谁能想到一种更好的方法来管理这些处理程序,同时仍然允许我将该功能封装在我的扩展类中?

抱歉帖子的长度,并提前感谢您的帮助!

-Funger

0 投票
1 回答
2711 浏览

c# - 了解 TypeDescriptor/PropertyDescriptor/等

见代码:

我对代码有几个问题:

(1) 我SerializableAttribute在 DataItem 的类型中添加了一个,这个“更改”适用于什么?我无法通过 . 获取此属性。typeof(DataItem).GetCustomAttributes(true)似乎更改未应用于“基本数据项”,它暂时存储在 TypeDescriptionProvider 中?

(2)实例another是由提供者创建的(我们添加属性的地方),我想现在这个变量和SerializableAttributed DataItem的构造函数创建的变量是一样的吗?即使我们仍然无法通过another.GetType().GetCustomAttributes.

(3) 我认为更改暂时存储在提供程序中的另一个原因是我试图创建一个具有其名称Str和类型的属性,该属性string实际上已经存在于DataItem. 代码将输出hello. 如果我取消注释该SetValue方法,输出将是new one. 我有什么误解吗?