VisiblePosition
クラスのColumn
プロパティのプロパティ変更イベントをサブスクライブする次のコードがあります。
DependencyPropertyDescriptor dpd = DependencyPropertyDescriptor.FromProperty(ColumnBase.VisiblePositionProperty, typeof(Column));
if (dpd != null)
{
dpd.AddValueChanged(col, ColumnVisiblePositionChangedHandler);
}
ColumnVisiblePositionChangedHandler
メソッドの定義は次のとおりです。
static internal void ColumnVisiblePositionChangedHandler(object sender, EventArgs e)
問題は、プロパティの古い値を取得する必要があることです。それ、どうやったら出来るの?
ありがとう、
残念ながら、この方法でプロパティ変更イベントハンドラーを登録すると、古い値の情報を取得できません。
回避策の1つは、プロパティ値をどこかに格納し(これは「古い」値です)、イベントハンドラーで現在の値と比較することです。
別の回避策は、独自の依存関係プロパティ(DP)を作成し、DPとコントロールのDPの間にバインディングを作成することです。これにより、WPFスタイルで変更通知が提供されます。
これが これに関する記事 です。
添付のイベントハンドラーに依存関係プロパティを登録すると、これを行うことができます。依存関係プロパティの構文と、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
}