问题标签 [system.componentmodel]
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.
asp.net-mvc - 覆盖所有验证属性的错误消息
我正在使用System.ComponentModel.DataAnnotations
属性进行验证,但希望不是从硬编码的字符串或资源而是从外部服务获取错误消息。到目前为止,我发现的解决方案需要太多代码 - 为每个属性创建适配器工厂,创建验证器提供程序并DataAnnotationsModelValidatorProvider
用ModelValidatorProviders.Providers
我自己的替换。有没有更好的方法,某种扩展点,代码可以“包装”所有对验证的调用,并且仍然可以访问属性本身,因为我使用ErrorMessageResourceType
和ErrorMessageResourceName
作为在外部服务中定位正确字符串的键。
(我使用的是 MVC 5,而不是 ASP.NET Core,这个问题看起来可以解决)
c# - 是否可以将自定义属性添加到 c# 枚举对象?
使用 c# 是否可以使用关联每个枚举项的属性?
我使用了描述属性为enum
项目添加了英文描述。
要为每个项目添加英文描述,我已完成以下操作
enum
然后我在我的调用中添加了一个扩展方法,GetDescription()
它允许我像这样获得描述
但是,如果我能够分配一个类或构造一个新对象,它将对我有很大帮助。
有可能/我怎样才能做类似以下的事情?
或使用课程
c# - 从标记的枚举中获取描述属性
我正在尝试创建一个扩展方法,该方法将返回一个仅包含给定的设置值的List<string>
所有属性。Description
[Flags] Enum
例如,假设我在 C# 代码中声明了以下枚举:
然后将变量设置为:
所以,我想创建的电话是:
最终结果将是:
我创建了一个扩展方法,用于获取不能设置多个标志的枚举的单个描述属性,如下所示:
而且我在网上找到了一些关于如何获取给定 Enum 类型的所有 Description 属性的答案(例如这里),但是我在编写通用扩展方法以仅返回 set attributes的描述列表时遇到问题。
任何帮助将非常感激。
谢谢!!
c# - 有没有办法从自定义 TypeDescriptionProvider 访问 ITypeDescriptorContext 或 IServiceProvider 对象?
这似乎是TypeDescriptor
动态元数据架构中的一个奇怪差距。所有TypeConverter
和UITypeEditor
其他动态设计器、编辑器和转换器类都提供对IServiceProvider
允许将设计上下文传递给实现类的对象的访问。
出于某种原因,这在TypeDescriptionProvider
,CustomTypeDescriptor
和相关的接口中是绝对缺失的。有没有办法在动态扩展类的元数据/属性时访问编辑器设计上下文?
wpf - 如何让 WPF XAML 设计器与 NET Standard 2.0 库中的 IValidatableObject 很好地配合使用?
背景:
使用 Visual Studio 2017 v15.4(没有 ReSharper 或任何奇怪的扩展)
Repro 解决方案包括 2 个项目:
- WPF 项目:.NET 4.6.1,使用 NuGet PackageReference 格式
- 类库:NET Standard 2.0
这两个项目都System.ComponentModel.Annotations
安装了 NuGet 包。
问题
将 WPF 项目的 NuGet 格式从旧packages.config升级到新PackageReference后,我开始遇到设计时错误:
首先,以下 ViewModel 代码可以正常工作:
但是,如果我随后在我的 NET Standard 项目中定义了一个相同的类,并将其作为一个类型包含在我的 ViewModel 中,则会产生错误。
比较这两个类的 IValidatableObject 上的 F12:
WPF 版本:
NET 标准 2.0 版本:
很明显,在具有不同名称的程序集中定义了相同的类型和命名空间——而不仅仅是程序集版本。
如何让 XAML 设计器成功找到需要使用的任何程序集IValidatableObject
?
我尝试过的事情
- 安装 VS v15.5 预览版并将 WPF 项目定位到 .NET 4.7(也是 15.5 预览版 2 和 3,.NET 4.7.1)
- 添加对 WPF 项目的旧
System.ComponentModel.DataAnnotations
引用(有和没有 NuGet 版本) - 恢复到 packages.config 格式(这实际上并没有成功;看来我被 PackageReference 困住了!)
- 从项目的输出文件夹中获取 System.ComponentModel.Annotations.dll 的副本并直接引用它(VS 不允许我这样做)
- 添加
bindingRedirect
到我的 App.config - 添加
<DependsOnNETStandard>True</DependsOnNETStandard>
到 .csproj - 添加
<DependsOnNETStandard>netstandard2.0</DependsOnNETStandard>
到 .csproj - 添加
<_HasReferenceToSystemRuntime>true</_HasReferenceToSystemRuntime>
到 .csproj - 将 NETStandard.Library NuGet 包添加到 WPF 项目
更新
对于受此问题困扰的其他任何人,我找到了一种解决方法:
- 在您的 NET Standard 项目用于 IValidatableObject 的硬盘驱动器上找到 System.ComponentModel.Annotations.dll。将其复制到项目中的某个位置。
- 从您的解决方案中卸载 System.ComponentModel.Annotations NuGet 包
- 为您的 NET Standard 项目提供对您复制的 DLL 的直接引用
- 为您的 WPF 项目提供对标准程序集 System.ComponentModel.DataAnnotations 的引用
- 将您的 WPF 项目升级到 .NET 4.7.1
- 编译。您的 WPF 设计时应该没有此错误。
.
c# - 在 datagridview 中格式化 dateTime 绑定到绑定列表
我已经: - Datagridview - BindingSource - BindingList
我将 BindingList 与包含 dateTime 属性的类相关联。datagridview 将值显示为“dd/mm/yy hh:MM”。我想格式化为“hh:MM:ss”。
我知道有一种设置列的模式:
但我想知道是否有不同的方法可以做到这一点,特别是通过两种方式:1)设置我想到的 System.ComponentModel 属性
但它不起作用。
2)将Datagridview中的所有dateTime列设置为'DefaultCellStyle.Format =“t”但我不太喜欢这个解决方案,因为它绑定到一个类的datagridview,我希望它已经是所有格式通过 System.ComponentModel 类属性在类中计划。
你有什么建议吗?
PS这里的代码:
javascript - 在 React 组件中传递变量与 onChange HTML 元素有关
Search 组件是如何传递给第二个子组件的?我无法将文本字段的 onChange 从我的子组件传递到我的主 index.js,任何输入表示赞赏。来自两个不同文件的代码
c# - System.ComponentModel.DataAnnotations 在属性和封装字段上的有效放置
我System.ComponentModel.DataAnnotations
在我的模型中使用了各种语法。想知道使用这种简写语法是否对放置有任何影响,DataAnnotations
以及下面进一步看到的放置DataAnnotations
在 Attributes 而不是 Accessor & Modifier 方法上的位置。
我的模型具有我认为是最佳实践的放置方式,DataAnnotations
当我将 OData 支持添加到未在此处发布的数据库上下文类时,它可以按预期工作
这个位置是否DataAnnotations
也被认为是有效的
c# - GetMember() 可以为枚举返回一个空数组吗?
看看这个enum
获取Description
属性的扩展方法:
还有一个enum
带有Description
属性的例子:
最后是扩展方法的使用:
我的问题是,当涉及到enum
s 时,是否有if (memberInfo.Length < 1)
必要进行检查?从曾经返回的数组GetMember()
是否会为空enum
?我知道你可以像这样声明一个空enum
:
但我不知道你是否甚至可以创建一个类型的变量Colors
......
我想删除if (memberInfo.Length < 1)
检查,但如果以后会引起问题,我不想这样做(我想不出我需要空的原因enum
,但其他开发人员可能会使用GetDescription()
扩展方法) .
visual-studio - VisualStudio 在设计时为我的组件自定义粘贴操作
我创建了 WinForm 组件,我想在开发人员复制时替换组件的一些属性,然后在设计时从剪贴板粘贴(不是复制时而是粘贴时)组件。
VisualStudio 创建组件的新副本并分配属性,使其成为源组件的副本。
我需要根据所选组件替换粘贴操作的一些属性。
它与使用控制组件的标准复制/粘贴操作非常相似。如果开发人员在粘贴控件之前选择其他容器(如面板),则设计人员更改组件的父级时。
我认为执行它的代码应该在我的 ComponentDesigner 类中的某个地方。我探索了 ComponentDesigner 方法,但找不到任何控制剪贴板操作的方法。