CollectionChanged 事件未在静态 ObservableCollection 上触发

CollectionChanged Event is not firing on a static ObservableCollection

在一个 class 中,我将对象添加到我的 ObservableCollection。在另一个 class 中,我正在处理添加的对象,然后将其从集合中删除。

那两个 classes 无法相互通信,所以我决定去 static 集合(由于某些原因我只能访问 class 定义)

在我的第一个 class 中,所有元素都已正确添加(我检查了 Count 属性),在第二个 class 中,我订阅了 [=13] =] 事件。但是,该事件并未引发。我认为这是因为 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);
    }
}

这里对我来说很好用:

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

更新

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

因此,您对 class C 的定义将类似于以下内容以注册事件:

  public class C
    {
        B obj = new B();
        public void func()
    {          
    A.MyCollection.Add(1);
    }
    }