Tag: system.componentmodel

从标记的枚举中获取描述属性

我正在尝试创建一个扩展方法,该方法将返回一个List其中仅包含给定[Flags] Enum的设置值的所有Description属性。 例如,假设我在C#代码中声明了以下枚举: [Flags] public enum Result { [Description(“Value 1 with spaces”)] Value1 = 1, [Description(“Value 2 with spaces”)] Value2 = 2, [Description(“Value 3 with spaces”)] Value3 = 4, [Description(“Value 4 with spaces”)] Value4 = 8 } 然后将变量设置为: Result y = Result.Value1 | Result.Value2 | Result.Value4; 所以,我想要创建的调用将是: List descriptions = y.GetDescriptions(); 最终结果将是: descriptions = { […]

何时以及为什么我们应该使用类System.ComponentModel.Container?

有人可以解释我们应该何时以及为什么要使用System.ComponentModel.Container ? 最近我在这里遇到了这门课程的使用,但是真的无法理解这里有什么好处可以让我们上课。

IEditableObject和IRevertibleChangeTracking有什么区别?

IEditableObject和IRevertibleChangeTracking (两者都来自System.ComponentModel命名空间)有什么区别? 看起来第一个支持显式事务,而第二个支持更隐式 – 但最终结果是相同的。 我应该如何在代码中实现它? 目前我在BeginEdit中什么都不做,并分别在EndEdit和CancelEdit中调用RejectChanges和AcceptChanges 。 我的问题是,这也将接受在B​​eginEdit之前所做的更改。 这真的是微软想要的,还是我试图实现两个互斥的接口?

数据绑定POCO属性

是否有任何数据绑定框架(BCL或其他)允许在实现INotifyPropertyChanged和INotifyCollectionChanged 任何两个CLR属性之间进行绑定? 似乎应该可以做这样的事情: var binding = new Binding(); binding.Source = someSourceObject; binding.SourcePath = “Customer.Name”; binding.Target = someTargetObject; binding.TargetPath = “Client.Name”; BindingManager.Bind(binding); someSourceObject和someTargetObject只是实现INotifyPropertyChanged POCO。 但是,我不知道BCL对此有任何支持,并且不确定是否存在允许这样做的现有框架。 更新 :鉴于没有现有的库,我已经自己写了自己的库。 它在这里可用。 谢谢

Linq表达式和扩展方法获取属性名称

我正在看这篇文章,它描述了一种在POCO属性之间进行数据绑定的简单方法: 数据绑定POCO属性 Bevan的评论之一包括一个简单的Binder类,可用于完成此类数据绑定。 它适用于我需要的东西,但我想实施Bevan为改进课程所做的一些建议,即: 检查是否已分配源和目标 检查sourcePropertyName和targetPropertyName标识的属性是否存在 检查两个属性之间的类型兼容性 此外,鉴于通过字符串指定属性容易出错,您可以使用Linq表达式和扩展方法。 然后而不是写作 Binder.Bind( source, “Name”, target, “Name”) 你可以写 source.Bind( Name => target.Name); 我很确定我可以处理前三个(虽然可以随意包含这些更改)但我不知道如何使用Linq表达式和扩展方法来编写代码而不使用属性名称字符串。 有小费吗? 以下是链接中的原始代码: public static class Binder { public static void Bind( INotifyPropertyChanged source, string sourcePropertyName, INotifyPropertyChanged target, string targetPropertyName) { var sourceProperty = source.GetType().GetProperty(sourcePropertyName); var targetProperty = target.GetType().GetProperty(targetPropertyName); source.PropertyChanged += (s, a) => { var […]

何时以及为什么要实现IComponent,IContainer和ISite?

我很想知道IComponent,IContainer和ISite的用途。 我已经阅读了文档,但它非常模糊(或者我认为它太难了)。 我知道如果我创建一个类作为组件,它可以在Visual Studio设计器中使用。 但我真的想更全​​面地了解:组件/容器模式的成就是什么,它能让我的生活更轻松吗?

如何在运行时将属性级属性添加到TypeDescriptor?

我想为对象的属性添加一些自定义的以PropertyGrid为中心的属性,以提供更丰富的编辑,隐藏一些值并将它们分类,因为我正在使用的那个类不提供这样的function而且我什么也做不了关于它。 实际上,它是MS的应用程序设置生成代码,因此您无法以任何方式扩展它的属性。 请参阅我的另一个问题: 运行时AppSettings.settings编辑器对话框