0

在一类中,我将对象添加到我的 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);
    }
}
4

1 回答 1

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.CollectionChangedline 您正在创建一个EventHandler来处理集合更改事件。它会在集合中进行任何更改(添加/更新/删除)时触发。因为它是您正在创建的委托,所以您必须指定sender谁拥有事件和参数的类型(它将处理什么),以便正确报告已发布的事件

更新

您只需查看您的代码。的实例class b尚未创建,只有在创建该类的新实例时才会自动调用该类的构造函数。您正在创建Event handler类 b 的内部构造函数。所以它还没有发布任何事件。这就是您的代码片段中未触发 collection_Change 事件的原因。

因此,您对 C 类的定义将如下所示来注册事件:

  public class C
    {
        B obj = new B();
        public void func()
    {          
    A.MyCollection.Add(1);
    }
    }
于 2015-05-29T11:23:50.793 回答