![](/img/trans.png)
[英]ObservableCollection CollectionChanged event seems not to be firing – why?
[英]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.