在一个课程中,我将对象添加到我的ObservableCollection中。在另一个课程中,我用我添加的对象做事,然后从集合中删除它。
这两个类无法相互通信,所以我决定选择static
集合(由于某种原因我只能访问类定义)
在我的第一堂课中,正确添加了所有元素(我检查了Count
属性),在第二节课中我订阅了CollectionChanged
事件。但是,事件并没有提高。我认为这是因为static
关键字,但我不确定。
以下是代码示例:
static public class A
{
public static ObservableCollection<object> MyCollection = new ObservableCollection<object>();
}
public class B
{
public B()
{
A.MyCollection.CollectionChanged += Func_CollectionChanged;
}
void Func_CollectionChanged(...)
{
//Stuff
}
}
public class C
{
public void func()
{
A.MyCollection.Add(object);
}
}
答案 0 :(得分:2)
这对我来说很好用:
class Program
{
static void Main(string[] args)
{
B obj = new B();
}
}
public class A
{
public static ObservableCollection<object> MyCollection = new ObservableCollection<object>();
}
public class B
{
public B()
{
A.MyCollection.CollectionChanged += Func_CollectionChanged;
A.MyCollection.Add(1);
}
private void Func_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
// do some stuff here
}
}
使用A.MyCollection.CollectionChanged
行创建EventHandler
来处理集合更改事件。它会在集合中进行任何更改(添加/更新/删除)时触发。由于它是您正在创建的委托,您必须指定拥有该事件的sender
和参数的类型(它将要处理的内容),以便正确报告已发布的事件
<强>更新强>
您只需查看代码即可。尚未创建class b
的实例,只有在创建类的新实例时,才会自动调用此类的构造函数。您正在类b的构造函数中创建Event handler
。所以它尚未发布任何活动。这就是您的代码段中没有触发collection_Change事件的原因。
因此,您对C类的定义类似于以下内容来注册事件:
public class C
{
B obj = new B();
public void func()
{
A.MyCollection.Add(1);
}
}