質問

私の静的クラス(DataFormSubject)を保持する汎用的なリストオブジェクトとして

private static List<DataForm> dataForms = new List<DataForm>();

その他のクラスに依存するこのリストを必要と言われるが、リストを更新しく作成したカスタムイベント、関連する方法がトリガーの項目を追加または削除されて

    public delegate void DataFormsUpdatedHandler(object sender);
    public static event DataFormsUpdatedHandler DataFormsUpdatedEvent;

    public static void AddDataForm(DataForm df)
    {
        dataForms.Add(df);
        if (DataFormsUpdatedEvent != null)
            DataFormsUpdatedEvent(df);
    }

    public static void RemoveDataForm(DataForm df)
    {
        dataForms.Remove(df);
        if (DataFormsUpdatedEvent != null)
            DataFormsUpdatedEvent(df);
    }

この一覧表からのご利用の静的クラスを介して財産として

   public static List<DataForm> DataForms
    {
        get { return dataForms; }
        //set { dataForms = value; }
    }

がここでの問題は、顧客で バイパス 更新イベントアクセスすることにより、財産その直接の追加と削除をクラス!E.g.

     DataFormSubject.DataForms.Add(new DataForm);

ってしまいますから、より良い方法をacheiving私が欲しがっているのか?理想的にはどのようアップデートイベントのリストクラスオブザーバーが加入!

役に立ちましたか?

解決

利用をお考えの BindingList<T> または ObservableCollection<T>;もらいたいものが標準です。

できない面白いのは、サブクラス List<T> -の方法なのです。 Collection<T> きり伸ばせる、この場合に必要なものがあるので( BindingList<T>).

特に、これを提供する。

  • IBindingList (多くのUI結合部品などのグリッド)
  • ListChanged -このコードに加入することが可能で詳細な通知

他のヒント

あなたはそのような目的のためにObservableCollectionを使用してに見てみたいです。参照してください。このMSDNの記事を始めるためにします。

のみ列挙を示し、静的クラスからのIListを表示しない:

public static IEnumerable<DataForm> DataForms
{
    get { return dataForms; }
    //set { dataForms = value; }
}

この方法ですべての変更は、

自分のクラスを介して行う必要があります
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top