簡體   English   中英

CollectionChanged事件未在靜態ObservableCollection上觸發

[英]CollectionChanged Event is not firing on a static ObservableCollection

在一個類中,我將對象添加到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);
    }
}

這里對我來說很好:

 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中創建Event handler 因此它尚未發布任何事件。 這就是collection_Change事件未在您的代碼段中觸發的原因。

因此,您對C類的定義將類似於以下內容來注冊事件:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM