2011-01-24 11 views
3

私はこの質問にどのように言いたいのか分からないので、これが重複している場合は私にご容赦ください。Modified Onタイムスタンプはクラスプロパティの変更で更新されます

基本的には、プロパティが変更されるたびにUpdateModifiedTimestampを呼び出す必要があります。これは私がかなり素早く書いたサンプルクラスですが、達成しようとしていることを説明する必要があります。

ファーストネーム、姓または電話が変更されるたびに、ModifiedOnプロパティが更新されます。これが最善の方法ですが、あなたがこれを行うことが一つの方法である場合は

public class Student { 
    public DateTime ModifiedOn { get; private set; } 
    public readonly DateTime CreatedOn; 
    public string Firstname { set; get; } 
    public string Lastname { set; get; } 
    public string Phone { set; get; } 

    public Student() { 
     this.CreatedOn = DateTime.Now(); 
    } 

    private void UpdateModifiedTimestamp() { 
     this.ModifiedOn = DateTime.Now(); 
    } 
} 

答えて

2

あなたは、通常はINotifyPropertyChangedインターフェイス経由で行われるプロパティ変更通知に非常に近いと言います。それはおそらく別のソリューションのために撮影しているものだならば、同様にあなたのクラスの消費者への変更通知が使用可能になるだろう。このアプローチを

public class Student :INotifyPropertyChanged 
{ 
    public string Firstname { set; get; } 
    public event PropertyChangedEventHandler PropertyChanged; 

    private void NotifyPropertyChanged(String info) 
    { 
     UpdateModifiedTimestamp(); // update the timestamp 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(info)); 
     } 
    } 

    string _firstname; 
    public string Firstname //same for other properties 
    { 
    get 
    { 
     return _firstname; 
    } 

    set 
    { 
     if (value != _firstname) 
     { 
      _firstname = value; 
      NotifyPropertyChanged("Firstname"); 
     } 
    } 
    } 
} 

:このインタフェースを実装すると、あなたの問題をもう少し汎用的なソリューションを与えるだろう好ましいであろう。

+0

私はINotifyPropertyChangedは、 'リスナー'が外部(例えば、データバインドされたソースが変更されたときにそれ自身を更新する必要のあるUIコントロール)であると、より意味をなさないと思います。この場合、INotifyPropertyChangedはすべて内部的なものなので、少しの付加価値で複雑さが増します。 –

1

わからない、あなたの特性の3つのセッターでUpdateModifiedTimeStamp()メソッドを呼び出します。

例:同様に

public string _firstName; 
public string Firstname 
{ 
    get { return this._firstName; } 
    set 
    { 
    this._firstName = value; 
    this.UpdateModifiedTimestamp(); 
    } 
} 

、同様Lastnameために同じことを行う、とPhoneプロパティ。

+0

これは私が避けようとしていたものです。これを行うためのよりクリーンな方法があると考えていました。 –

+0

@J。 Mitchell:これは、@ BrokenGlassの答えによって提案されたINotifyPropertyChangedの使用以外に私が知っている唯一の方法です。私は清潔な方法があるかどうかを知ることに興味があります。 – VoodooChild

+0

@ J。ミッチェル:同様に、要件については不明です。しかし、これをデータベースに更新するためにこれを行う場合、通常は、dbテーブルにトリガがあり、そのテーブルで何かが更新されると自動的にそのカラムを更新します。これにより、コードにロジックをハードコードする代わりに、時間とコードを節約できます。さらに、 'ModifiedOn'は' Student'オブジェクトの更新後に他の多くのメソッドを呼び出すかもしれないので正確ではないかもしれません。 – VoodooChild

関連する問題