【发布时间】:2017-07-19 16:26:58
【问题描述】:
我有一个类,它的孩子在其中初始化并声明 ObservableCollections。我想在基类中收集子类的集合,以便稍后在通用方法中使用,所以我编写了一个事件处理程序,它在 ObservableCollection 的子类的构造函数中引发,并且处理程序被添加到我的 BaseView 类中.小提示:很多子视图确实已经存在,我想在不更改代码的情况下实现它。我的 ObservableCollection 孩子看起来像这样:
public class ObservableCollection<T> : System.Collections.ObjectModel.ObservableCollection<T>
{
public ObservableCollection()
:base()
{
OnConstructorCalled(new ConstructorCalledEventArgs(this));
}
public static event ConstructorCalledEventHandler ConstructorCalled;
protected static void OnConstructorCalled(ConstructorCalledEventArgs e) => ConstructorCalled?.Invoke(e.Sender, e);
}
public class ConstructorCalledEventArgs : EventArgs
{
public object Sender;
public ConstructorCalledEventArgs(object sender)
{
Sender = sender;
}
}
public delegate void ConstructorCalledEventHandler(object sender, ConstructorCalledEventArgs e);
我的 BaseView 是这样的
protected ObservableCollection<ObservableCollection<TObject>> ObservableCollectionCollector = new ObservableCollection<ObservableCollection<TObject>>();
protected BaseView()
{
ObservableCollection<TObject>.ConstructorCalled += OnCollectionDeclared;
}
private void OnCollectionDeclared(object sender, ConstructorCalledEventArgs e)
{
if (sender is ObservableCollection<TObject>)
{
ObservableCollectionCollector.Add(sender as ObservableCollection<TObject>);
}
}
我现在的问题是,该事件没有引发,我不知道为什么......
编辑:
我现在选择了一种不同的方法,因为我在泛型类及其事件处理程序方面遇到了一些问题。我创建了一个新的静态类,它现在处理 Views 和 ObservableCollections 的构造函数调用。它在我手中发挥作用,我只期待一种类型的 ObservableCollection 类。现在我的代码如下所示:
基础视图:
public class BaseView<TObject>
{
public List<ObservableCollection<int>> ObservableCollectionCollector = new List<ObservableCollection<int>>();
public BaseView()
{
ObservableCollectionCollector = CollectionHandler.GetAndRemoveCollection();
}
}
ObservableCollection:
public class ObservableCollection<T> : System.Collections.ObjectModel.ObservableCollection<T>
{
public ObservableCollection()
: base()
{
AddToCollectionHandler();
}
private void AddToCollectionHandler()
{
if (this is ObservableCollection<int>)
{
CollectionHandler.AddToCollection(this as ObservableCollection<int>);
}
}
}
还有我的 CollectionHandler:
static class CollectionHandler
{
private static List<ObservableCollection<int>> collection = new List<ObservableCollection<int>>();
public static List<ObservableCollection<int>> GetAndRemoveCollection()
{
List<ObservableCollection<int>> col = collection;
collection = new List<ObservableCollection<int>>();
return col;
}
public static void AddToCollection(ObservableCollection<int> item) => collection.Add(item);
}
顺便说一句。子视图可能如下所示:
public class ChildView : BaseView<string>
{
ObservableCollection<int> collection = new ObservableCollection<int>();
public ChildView()
: base()
{
}
}
【问题讨论】:
标签: c# events eventhandler