0

DataClass という名前のクラスが 1 つあります。このクラスはデータベースに情報を保存する責任があります. このクラスにはデータベースから保存および読み取るためのメソッドがいくつかあります. このクラスを除いて, HTMLEditor, QueryBuilder , EmailSending, InforDetails と呼ばれる他のクラスがあります. データクラスで他のクラスをリッスンする必要があります。それらの情報が変更されるたびに、これらの情報を保存するようにデータクラスに通知されます。オブザーバーデザインパターンと呼ばれる1つのデザインパターンがあることを私は知っています。このデザインパターンでは、他のクラス(オブザーバー)が1つのクラス(サブジェクト)をリッスンし、サブジェクトのステータスが変更されるたびに他のオブザーバーに通知されます。

この問題を解決するにはどうすればよいですか? この状況の設計パターンはありますか?

4

2 に答える 2

2

なら求めるインターフェースだと思いますINotifyPropertyChanged

Microsoft ドキュメント: INotifyPropertyChanged

実装は非常に簡単です。

あなたが行うすべてのプロパティsetで:

public bool MyProperty
{
    get { return myField; }

    set
    {
        if (myField != value)
        {
            myField= value;
            NotifyPropertyChanged();
        }
    }
}

メソッドとイベント:

public event PropertyChangedEventHandler PropertyChanged;

private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
{
    if (PropertyChanged != null)
    {
        PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }
}

すべてのオブザーバーは、そのイベントに登録するだけで、プロパティが変更されたときにフィードバックを取得し、どのプロパティが変更されたかを確認できます。

さらに、PropertyGrid などの一部のコントロールは、そのインターフェイスを実装するオブジェクトをフィードすると、自動的に登録されます。

于 2012-11-21T01:21:15.020 に答える
1

インターフェースは、INotifyPropertyChangedあなたが求めているものかもしれません:

ここを参照してください: http://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged.aspx

基本的に、他のクラス内のイベントにサブスクライブし、プロパティが変更されたときにそれらのクラスがイベントを発生させます。

また、この SO の質問には非常にクールな回答があります:自動的に INotifyPropertyChanged

于 2012-11-21T01:18:50.867 に答える