C# 编辑并触发列表的PropertyValueChanged事件<;字符串>;在不动产网格中
我试图用PropertyGrid编辑一个C# 编辑并触发列表的PropertyValueChanged事件<;字符串>;在不动产网格中,c#,winforms,C#,Winforms,我试图用PropertyGrid编辑一个列表,当它的内容被修改时,它不会触发PropertyValueChanged事件 我对此进行了研究,并尝试使用自定义的TypeConverter类,但即使我让编辑器显示并允许我修改值,我也无法触发此事件 我还尝试使用下面的属性,它会调出字符串编辑器,但这也不会在更改时触发事件 [Editor("System.Windows.Forms.Design.StringCollectionEditor, System.Design, Version=1.0.500
列表
,当它的内容被修改时,它不会触发PropertyValueChanged事件
我对此进行了研究,并尝试使用自定义的TypeConverter
类,但即使我让编辑器显示并允许我修改值,我也无法触发此事件
我还尝试使用下面的属性,它会调出字符串编辑器,但这也不会在更改时触发事件
[Editor("System.Windows.Forms.Design.StringCollectionEditor, System.Design, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Drawing.Design.UITypeEditor, System.Drawing, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]
我还尝试使用UITypeEditor
并重写EditValue
方法,但在编辑值时,这不会触发
public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
{
MessageBox.Show("This never appears...");
return base.EditValue(context, provider, value);
}
有没有办法编辑
列表
并触发PropertyValueChanged事件?您应该使用绑定列表
而不是列表
来触发PropertyValueChanged
事件
编辑:
@LarsTech指出,ObservableCollection
实际上用于WPF,而不是winforms,您应该使用BindingList
简而言之,BindingList
比observedcollection
支持更多的接口和功能。以下是使用BindingList的一些优点:
实现了BindingList
,但IBindingList
没有实现observedcollection
提供了一整套功能,用户界面可以使用这些功能提供更多信息,请查看更多详细信息IBindingList
实现数据绑定机制用于取消新添加项的BindingList
李>ICancelAddNew
不监听其子项中的更改,而只监听observedcollection
和插入
事件李>删除
第2点和第3点完全归功于:正如langstrom所述,BindingList不会触发事件PropertyValueChanged 我使用了一个简单而难看的解决方法:在调整后,我设置了完整的集合(它只有几个项目): CollectionValue=CollectionValue (我的目标是,如果IDataErrorInfo为已编辑的属性提供了一些错误,则为(字符串的)ObservableCollection在自定义PropertyGrid编辑器周围获得一个红色边框。) 也看到 (讨论)
(发出通知单)如果在使用PropertyGrid修改值后绑定列表未刷新,则可以调用BindingList.ResetBindings()来触发更改。是否尝试过以下操作:[PropertyGrid不引发PropertyValueChanged事件][1][1]:是,当通过PropertyGrid更改属性时,这不会调用事件。在WinForms中,通常使用BindingList。这最终对我有效。我订阅了
BindingList
的ListChanged
事件。此事件触发的次数比列表中的项数多一次,因此我必须对此进行说明。不完全是我想要的,但这让我振作起来。谢谢编辑:而且,这不会触发属性value changed
,至少我看不出来。