0

あるクラスでは、ObservableCollection にオブジェクトを追加しています。別のクラスでは、追加したオブジェクトを処理してから、コレクションから削除しています。

これらの 2 つのクラスは相互に通信できないため、staticコレクションに行くことにしました (何らかの理由でクラス定義にしかアクセスできません)。

最初のクラスでは、すべての要素が適切に追加され (Countプロパティを確認しました)、2 番目のクラスではイベントをサブスクライブし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.CollectionChanged作成しています。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 に答える