问题标签 [icustomtypedescriptor]

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 投票
0 回答
466 浏览

wpf - 带有 XamDataGrid 的 ICustomTypeDescriptor

我已扩展 XamDataGrid 以支持使用名为 ColumnSource 的 DependencyProperty 生成 DynamicColumn。因此,网格现在将根据名为“ColumnSource”的依赖属性动态生成列。这个想法的灵感来自我之前使用的 DevExpress WPF Grid。

话虽如此,我需要提一下,我在扩展控件中使用 Field(不是 UnBoundField)来生成列并将它们绑定到 ViewModel 对象。对于我到目前为止的要求,它工作得很好。

现在我有一个需要动态属性的 ViewModel 的情况。显然,我有 ICustomTypeDescriptor 的想法。我只是好奇是否可以在 XamDataGrid 中查看数据,但有以下限制:

  1. .Net 4.0
  2. ICustomTypeDescriptor
  3. 使用字段而不是 UnboundField 类来生成列。
  4. 显示的数据应该是两种可绑定的,即单元格数据的更改应该更改适当的 ViewModel 属性。

我在这里粘贴扩展控件的代码。它很长,所以我会尽量减少负责其他功能的代码。

这是 IGridColumn 合同:

我计划为 Grid 填充 ColumnSource 并将它们绑定到 ViewModel 的 ICustomTypeDescriptor 实例,其动态属性名称将与 IGridColumn 名称匹配。

0 投票
1 回答
1687 浏览

wpf - ICustomTypeProvider 或 DynamicObject

我希望绑定到一个根据下面的代码动态公开其属性的类。似乎 ICustomTypeProvider 和 DynamicObject 都适用于此。任何人都可以解释为什么我可能想使用一个而不是另一个?

0 投票
0 回答
793 浏览

wpf - 将 ICustomTypeDescriptor 与 ItemsControl 一起使用

我正在实现 ICustomTypeDescriptor,以便可以在运行时创建具有动态属性的类型,但是,我不想将 ICustomTypeDescriptor 与大多数人似乎使用的 DataGrid 一起使用,而是希望将它与 ItemsControl 一起使用。

以下是应用程序的内容。(对不起,代码很多)

XAML:

问题是,通过上述实现,当我更改属性值时 ItemsControl 不会更新(请参阅 OnMouseDoubleClick),这是可以预料的,因为我在真正应该绑定时绑定到初始“CustomType.Properties”按名称分配给每个属性。我不能做后者,因为直到运行时我才知道属性名称。

因此,我假设我需要在后面的代码中动态地进行绑定,但我不太清楚如何。

0 投票
1 回答
1468 浏览

c# - WPF DataGrid 不会为 ICustomTypeDescriptor 属性生成列(但 Winforms DataGridView 会)

如标题所示,我有一个 DataGrid 和一个实现 ICustomTypeDescriptor 的 ViewModel,在运行时添加了一些属性。

XAML 中的 DataGrid 定义:

我这样设置 ItemsSource:

其中controller.PartCloneSettingsControllers定义为:

出于调试目的,我在 Winforms 控件主机中创建了一个 DataGridView 并将相同的 ViewModel 附加到它,瞧:Winforms 网格创建所有列并按我想要的方式显示数据,但是 WPF DataGrid 无法为我的自定义属性生成列(它适用于普通的普通属性)。

是否有人有使用 DataGrid、ICustomTypeDescriptor 和 AutoGenerateColumns=True 的工作解决方案(如果我在 XAML 中手动生成列,它工作正常,我可以绑定到我的所有属性......)

0 投票
0 回答
407 浏览

c# - .net 中的自定义属性描述符

我正在使用扩展 wpf 工具包中的PropertyGrid

需要实现属性网格的本地化。为了实现这一点,一个基类实现ICustomTypeDescriptor,另一个类实现PropertyDescriptor

我能够本地化属性网格。但是有一个相关的问题。

1)如果基类实现了ICustomTypeDescriptor,并且假设派生类具有与基类相同的属性名称(被覆盖的属性),则抛出异常。

基类:

派生类:

0 投票
1 回答
6604 浏览

c# - 将包含属性的上下文传递给 TypeConverter

我正在寻找一种将附加信息传递给 a 的方法TypeConverter,以便在不创建自定义构造函数的情况下为转换提供一些上下文。

传递的额外信息将是包含我正在转换的属性的原始对象(在编译时称为接口)。它包含自己的属性,这些属性Id对于查找转换相关信息很有用。

我已经查看了ITypeDescriptorContext的文档,但我还没有找到一个明确的示例来说明如何实现该接口。我也不相信这是我需要的工具。

目前,在我的代码中,我正在调用:

我想做的是类似的事情。

我希望能够使用其中一个重载来做我需要的事情,以便任何自定义转换器都可以继承TypeConverter而不是具有自定义构造函数的基类,因为这将使依赖注入和使用DependencyResolver.Current.GetService(type)MVC 来初始化的生活更轻松我的转换器。

有任何想法吗?

0 投票
1 回答
421 浏览

c# - ICustomTypeDescriptor GetConverter 实现

我有一个用 a 装饰的基类,TypeDescriptionProviderAttribute它指向ICustomTypeDescriptor.

有一个派生类装饰有一个TypeConverterAttribute做自定义类型转换。

BaseClassTypeDescriptor通过ICustomTypeDescriptor.GetConverter调用静态TypeDescriptor.GetConverter方法来实现。该方法有两个参数:有问题的类型(我有一个引用)和一个指示是否允许调用自定义行为的标志。这必须设置为true防止无限循环。

代码的精简版本如下所示:

问题是这个标志似乎不仅绕过BaseClassTypeDescriptor,而且似乎阻止 .NET 识别TypeConverterAttribute派生类上的 。

TypeConverterAttribute我已经通过重新实现对我的实现内部的检查来解决这个问题MyCustomTypeConverter.GetConverter,如下所示:

这远非理想的解决方案。关于如何将责任委托给它所属的地方有什么建议吗?

0 投票
1 回答
340 浏览

propertygrid - WPFExtendedToolkit PropertyGrid 标准值

我正在尝试XmlElement在 Xceed PropertyGrid 中显示 的属性。为此,我定义了自定义包装类。它包装 XmlElement,遍历 XmlAttributes 并为每个 XmlAttribute 创建自定义 PropertyDescriptor。所有“虚拟”属性的类型都是String. 一切正常。现在,我想为每个具有受限值集的属性提供可能的属性值的下拉列表。在 Xceed 的 PropertyGrid 中,就是ItemsSourceAttribute这样。但它必须按如下方式应用:

这就是问题所在 - 我无法为MyCustomItemsSource构造函数提供正确的参数。我能做些什么呢?

似乎还有另一种可能性 - 定义 TypeConverter,覆盖 GetStandardValues,并将此转换器提供给“虚拟”属性。但是 PropertyGrid 只是忽略了这个属性。

如何使用 Xceed PropertyGrid 完成这个简单的任务?

0 投票
1 回答
1282 浏览

c# - 在 PropertyDescriptor 中的 ResetValue 之后强制属性网格更新

我正在使用 winforms 中的属性网格来显示我的自定义类型的属性 - 我使用自定义类型描述符(实现接口 ICustomTypeDescriptor)来执行此操作,以便显示我的对象的公共属性,每个属性都有自己的 PropertyDescriptor 实现。

该实现接近此处描述的代码:http: //www.codeproject.com/Articles/4448/Customized-display-of-collection-data-in-a-Propert

这有效,因为我可以看到所有属性,并且它们在属性网格中有自己的编辑器但是我有如何实现的问题

在基础 PropertyDescriptor 上。

目前我已经像这样实现它:

然而,尽管数据确实得到了更新,属性网格显示只显示旧值,除非我刷新它 - 我无法弄清楚属性网格将如何更新或知道值已更改,是否存在某种事件刷新可以从 PropertyDescriptor 实现触发的单元格?

0 投票
0 回答
124 浏览

c# - UITypeEditor 工作原理

我想彻底了解 UITypeEditor 如何使用 PropertyGrid 为其添加更多功能。我找到了一些工作示例,但这对试图理解它是如何工作的没有多大帮助。我想将 UITypeEditor 用于实现 ICustomTypeDescriptor 的定制第 3 方 PropertyGrid,但它不起作用。

欢迎任何提示或解释。

提前致谢。