0

在一個類中,我將對象添加到我的ObservableCollection中。而在另一個課堂上,我正在做我添加的對象的東西,然後從集合中刪除它。 (我CollectionChanged事件不是在靜態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

上面的代碼是錯誤的:你如何訪問在「A」中定義的MyCollection的不指定一個在C -類? –

+0

代碼片段已修復。即使出現這個小錯誤,你也可以理解我的問題 –

回答

2

這正常工作對我來說:通過使用A.MyCollection.CollectionChanged

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 
     } 
    } 

要創建EventHandler處理集合更改事件。它會在集合中進行任何更改(添加/更新/刪除)時觸發。因爲它是要創建一個代表,你必須指定誰擁有的事件和參數的類型(它所要處理),順序獲得發佈的事件

更新的正確報告的sender

你只是看看你的代碼。 class b的實例尚未創建,此類的構造函數將僅在創建類的新實例時自動調用。您正在創建類b的構造函數中的Event handler。所以它還沒有發佈任何事件。這就是collection_Change事件在您的代碼片段中沒有觸發的原因。

因此您的C類定義會像下面的註冊事件:

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

這不適用於我......我給了你一段糟糕的代碼,我只是編輯了我的問題。我正在使用不同的環境(軟件的SDK),也許這是問題所在。我只是想確保我正確地做事 –

相關問題