gpt4 book ai didi

c# - 如何使 CollectionEditor 在添加或删除项目时触发 CollectionChanged 事件?

转载 作者:太空宇宙 更新时间:2023-11-03 10:38:39 26 4
gpt4 key购买 nike

我有很久以前从某个地方抓取的这个自定义控件:

public class NotifyingCollectionEditor : CollectionEditor
{
// Define a static event to expose the inner PropertyGrid's PropertyValueChanged event args...
public delegate void MyPropertyValueChangedEventHandler(object sender, PropertyValueChangedEventArgs e);
public static event MyPropertyValueChangedEventHandler ElementChanged;

// Inherit the default constructor from the standard Collection Editor...
public NotifyingCollectionEditor(Type type) : base(type) { }

// Override this method in order to access the containing user controls from the default Collection Editor form or to add new ones...
protected override CollectionForm CreateCollectionForm()
{
// Getting the default layout of the Collection Editor...
CollectionForm collectionForm = base.CreateCollectionForm();
Form frmCollectionEditorForm = collectionForm as Form;
TableLayoutPanel tlpLayout = frmCollectionEditorForm.Controls[0] as TableLayoutPanel;

if (tlpLayout != null)
{
// Get a reference to the inner PropertyGrid and hook an event handler to it.
if (tlpLayout.Controls[5] is PropertyGrid)
{
PropertyGrid propertyGrid = tlpLayout.Controls[5] as PropertyGrid;
propertyGrid.PropertyValueChanged += new PropertyValueChangedEventHandler(propertyGrid_PropertyValueChanged);
}
}

return collectionForm;
}

void propertyGrid_PropertyValueChanged(object sender, PropertyValueChangedEventArgs e)
{
// Fire our customized collection event...
var evt = NotifyingCollectionEditor.ElementChanged;

if (evt != null)
evt(this, e);
}
}

它曾经在集合中的一个编辑项目发生变化时触发事件,但我需要它触发,即使一些项目被添加或删除到这个集合中。

目前,除了比较创建表单时和表单关闭时的元素数量外,我没有其他想法。

但是我如何才能访问该已编辑的集合以获取它的 Count 值?

我尝试访问 propertyGrid.SelectedObject 但它为空,即使它不是,我认为存在集合项,而不是集合。

最佳答案

最好的办法是使用 System.Collections.ObjectModel 中定义的 ObservableCollection。这将在添加或删除集合时引发事件。此类是框架的一部分,因此无论现在还是将来都应该能很好地工作。

如果您希望监视集合中的类型 (T),则该类型必须实现 INotifyPropertyChanged。

关于c# - 如何使 CollectionEditor 在添加或删除项目时触发 CollectionChanged 事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26406775/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com