2012-01-11 8 views
17

私はColumnクラスのVisiblePositionプロパティのプロパティ変更イベントをサブスクライブするために、次のコードがあります。たDependencyProperty変更されたイベントを聞いて、古い値を取得

:ここ

DependencyPropertyDescriptor dpd = DependencyPropertyDescriptor.FromProperty(ColumnBase.VisiblePositionProperty, typeof(Column)); 

if (dpd != null) 
{ 
    dpd.AddValueChanged(col, ColumnVisiblePositionChangedHandler); 
} 

ColumnVisiblePositionChangedHandlerメソッドの定義がされ

static internal void ColumnVisiblePositionChangedHandler(object sender, EventArgs e) 

問題は、プロパティの古い値を取得する必要があります。それ、どうやったら出来るの?

おかげで、

答えて

15

プロパティ変更イベントハンドラをこのように登録する際残念ながら、あなたは古い値の情報を得ることはありません。

回避策の1つは、プロパティ値をどこかに格納することです(これは「古い」値です)。次に、イベントハンドラの現在の値と比較します。

もう1つの回避策は、独自の依存関係プロパティ(DP)を作成し、DPとコントロールのDP間のバインディングを作成することです。 WPFスタイルで通知を変更できます。

ここにはarticle about thisがあります。

+0

回避策#2はシンプルで気分がいいです!投票しました! – MarqueIV

5

あなたが添付イベントハンドラで、あなたの依存関係プロパティを登録する際にそれを行うことができます。依存関係プロパティの構文とどのようにPropertyChangedイベントハンドラに古い値を取得するには、以下の見つけてください:

//Declaration of property 
public static readonly DependencyProperty MyNameProperty = 
      DependencyProperty.Register("MyName", typeof(PropertyType), 
             typeof(ClassName), 
             new PropertyMetadata(null, 
                  new PropertyChangedCallback(MyNameValueChanged))); 

//PropertyChanged event handler to get the old value 
private static void MyNameValueChanged(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs eventArgs) 
{ 
    object oldValue = eventArgs.OldValue; //Get the old value 
} 
+10

-1 OPは、新しいプロパティを作成する方法ではなく、他の人が作成したプロパティにアタッチすることを尋ねていました。 –

+1

選択された回答がその状況の正しい選択であることは事実ですが、VS1の回答が自分の状況に必要なものとまったく同じであることも同じです。私は彼の答えを上げることはしませんが、彼の答えは誰かが現実の世界の問題を解決するのを助けてくれたことを認めたかったのです。 – CobaltBlue

関連する問題