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

c# - PropertyGrid - 从 IList 派生的属性, 如何添加到 PropertyGrid 以便用户可以添加/编辑/删除项目

让我提供一些关于我如何达到这一点的历史。

我最初在我的类中有一个从 CollectionsBase 派生的属性,并将这个集合映射到 PropertyGrid,用户可以随意从列表中添加/编辑/删除项目。

但是,我无法将 CollectionsBase 与 NHibernate 映射,因此我不得不放弃我的初始实现,而不是从 CollectionsBase 派生,我让类派生自 IList。

现在我可以映射到 NHibernate,但我无法通过 PropertyGrid 编辑集合。

我需要一些帮助才能让两人好好相处。

在我的主类中,我有一个属性定义为:

继承 IList 的我的 Zone Collection 定义如下:

}

现在,当此类从 CollectionsBase 派生时,我的 ICustomTypeDescriptor 和 PropertyDescriptor 工作正常,但现在它只在属性名称中显示类名称 ZoneCollection,而没有“...”按钮来添加/编辑/删除列表中的项目。

现在我做错了什么,因为它是从 IList 继承的,这不起作用?

如果我添加:

在 ZoneCollection 的开头,我将列表中的项目列在可展开的树中,但这不是我想要的。当我从 IList 而不是 CollectionBase 继承时,“...”按钮在哪里打开了一个弹出窗口,使我能够添加/编辑/删除集合中的项目?

0 投票
1 回答
577 浏览

dynamic - DataGridView ICustomTypeDescriptor

我想构建一个带有数据绑定的 DataGridView 到一个可以在运行时添加属性的类。我想在运行时添加列并将值存储在类中。我在这里找到了一个很好的例子(Dictionary to store Properties with ICustomTypeDescriptor)

它工作正常,直到我想从 DataGridView 读取信息。我得到 NullReferenzException 或 IndexOutOfBoundException。

我认为我的 BindingClass 中缺少 ICustomTypeDescriptor。.NET 设计器不在 Visual Studio 中创建列,而是在程序启动时创建列。

如果有人能帮我解决这个问题,我会很高兴的。

0 投票
2 回答
8897 浏览

c# - 什么是 ICustomTypeDescriptor 以及何时使用它?

我不明白它是什么以及何时使用它。MSDN 没有帮助我。MSDN 声明 ICustomTypeDescriptor 提供了一个接口,该接口为对象提供动态自定义类型信息。

0 投票
1 回答
1798 浏览

wpf - 为什么在实现 INotifyPropertyChanged 时 WPF 似乎绕过了 TypeDescriptionProviderAttribute?

我正在尝试使用[TypeDescriptionProviderAttribute],以便为我的类提供自定义类型描述符。这可行,但是当我实现INotifyPropertyChangedWPF 时似乎忽略了自定义类型描述符并直接使用 CLR 属性(如果它存在)。这是一个片段,稍后我将粘贴完整的示例:

我将 TextBlock 绑定到 TheProperty。当我...

  • 留下所有评论

    我按预期看到“CLR - TheProperty”。

  • 采用[TypeDescriptionProvider]

    我按预期看到“MyPropertyDescriptor - TheProperty”。

  • 采用ICustomTypeDescriptor

    我按预期看到“MyPropertyDescriptor - TheProperty”。

  • 使用ICustomTypeDescriptorINotifyPropertyChanged

    我按预期看到“MyPropertyDescriptor - TheProperty”。

  • 使用[TypeDescriptionProvider]INotifyPropertyChanged

    我看到“CLR - TheProperty”。为什么是这样?奇怪的是,没有CLR 属性的自定义属性会正常显示。我的自定义类型描述符还返回一个“MyPropertyDescriptor - AnotherProperty”,它适用于所有情况,因为没有AnotherProperty定义 CLR。

总之,鉴于此 XAML

AnotherProperty始终按预期工作,因为该模型没有名为“AnotherProperty”的 CLR 属性。TheProperty按预期工作,除非同时使用和[TypeDescriptionProvider]INotifyPropertyChanged

这是完整的代码。它有点长,但大部分都无关紧要,它只是 System.ComponentModel 需要的

0 投票
0 回答
190 浏览

wpf - ICustomTypeDescriptor 和混合

我正在为一个新项目制作绑定原型,但遇到了 Blend 和绑定的障碍。我们正在尝试给我们一个实现了接口的BindableEntity类。ICustomTypeDescriptor这样做的原因是允许将实体框架和 UI 上的绑定分开。

我们遇到的问题是 Blend 使用反射而不是ICustomTypeDescriptor我们的属性描述符的实现。例如,当我单击主窗口中某个文本块的绑定时,我需要显示FirstNameLastName属性,以便设计人员可以选择它们。我不希望他们使用自定义绑定。具有讽刺意味的是,Visual Studio 演示了所需的行为。

这是 源代码的链接

有没有人对如何做到这一点有任何想法?

0 投票
2 回答
2608 浏览

.net - 对象上的 ICustomTypeDescriptor 包装器

我在我的应用程序中实现了 ICustomTypeDescriptor,以便能够在运行时定义自定义属性。我的基本实现如下所示:

问题是,现在当我使用 DynamicClass 绑定器将对象绑定到文本框时,它不再起作用。

我这样使用它:

我得到了例外:“对象与目标类型不匹配。”

对象与目标类型不匹配。

在 System.Reflection.RuntimeMethodInfo.CheckConsistency(Object target) 在 System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] 参数, CultureInfo 文化, Boolean skipVisibilityChecks) 在 System.Reflection.RuntimeMethodInfo.Invoke( Object obj、BindingFlags invokeAttr、Binder binder、Object[] 参数、CultureInfo 文化)
在 System.ComponentModel.ReflectEventDescriptor.AddEventHandler(Object 组件,委托值) 在 System.ComponentModel.ReflectPropertyDescriptor.AddValueChanged(Object 组件,EventHandler 处理程序) 在 System.Windows.Forms.BindToObject.CheckBinding() 在 System.Windows.Forms.Binding .SetListManager(BindingManagerBase bindingManagerBase) 在 System.Windows.Forms.ListManagerBindingsCollection.AddCore(Binding dataBinding) 在 System.Windows.Forms.BindingsCollection.Add(Binding binding) 在 System.Windows.Forms.BindingContext.UpdateBinding(BindingContext newBindingContext, Binding binding ) 在 System.Windows.Forms.Control.UpdateBindings()

如果我使用 ext 对象而不是 binder,则绑定有效。我错过了 ICustomTypeDescriptor 实现中的某些内容吗?

0 投票
1 回答
660 浏览

c# - 如何在 PropertyGrid C# 中自定义 PropertyInfo[] 对象

我有一个动态加载的类,我事先不知道它包含多少(或什么类型)属性。我想以显示常规类的方式将其所有属性加载到 PropertyGrid 中。

例如,如果这是我的课:

我使用反射来生成一个对象并获取它的属性:

如何在 PropertyGrid 中显示属性?
我已经多次准备好这篇文章 http://www.codeproject.com/Articles/4448/Customized-display-of-collection-data-in-a-Propert 但我似乎无法让它工作。

一些指导将不胜感激。

谢谢!

0 投票
1 回答
4041 浏览

c# - 属性网格中的列表扩展器,带有通用 ICustomTypeDescriptor

我有一个Parameters.cs实现接口的通用类()ICustomTypeDescriptor:.

我将泛型类用于几个不同的类,其中之一是:

Class1.cs:

职位类别:

现在列表在 Propertygrid 中显示为三个点(“...”)。

我希望它与 Expander ("+") 一起显示,我们如何通过 ICustomTypeDescriptor?

编辑:

我试着把列表放在[TypeConverter(typeof(ExpandableObjectConverter))]上面Pos,它没有帮助。

0 投票
1 回答
836 浏览

c# - 提交给属性代理

假设我有以下不允许更改的类:

现在我想通过将它们放入 PropertyGrid 来编辑这些数据。我创建了两个像这样的 Wrapper 类(http://msdn.microsoft.com/en-us/magazine/cc163816.aspx

我可以在 PropertyGrid 中查看和编辑“m_newMember”,但我需要通过 FieldsToPropertiesProxyTypeDescriptor 包装对“m_baseData”的访问。我怎么能做到这一点。或者有没有更好的方法将字段包装到属性中?

0 投票
1 回答
705 浏览

c# - 为什么 TypeDescriptor.GetProperties 在使用 ICustomTypeDescriptor 时对类型和对象表现不同

我创建了一个实现 ICustomTypeDescriptor 的通用类 Group。它只是将泛型类型参数的属性添加到自己的属性中。

为什么以下代码的行为不同?

我认为这一定与属性是在对象的实例时间生成的事实有关。但是使用的类型不是已经定义了属性的数量吗?

是否可以在不实例化类型的情况下解决此问题?