【问题标题】:Listen to DependencyProperty changed event and get the old value监听 DependencyProperty 更改事件并获取旧值
【发布时间】:2012-02-08 08:07:12
【问题描述】:

我有以下代码订阅VisiblePositionColumn 类的属性更改事件:

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

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

这里是ColumnVisiblePositionChangedHandler方法的定义:

static internal void ColumnVisiblePositionChangedHandler(object sender, EventArgs e)

问题是我需要获取该属性的旧值。我该怎么做?

谢谢,

【问题讨论】:

    标签: wpf dependency-properties


    【解决方案1】:

    不幸的是,以这种方式注册属性更改事件处理程序时,您不会获得旧值信息。

    一种解决方法是将属性值存储在某处(这是您的“旧”值),然后将其与事件处理程序中的当前值进行比较。

    另一种解决方法是创建您自己的依赖属性 (DP) 并在您的 DP 和控件的 DP 之间创建绑定。这将为您提供 WPF 样式的更改通知。

    这是article about this

    【讨论】:

      【解决方案2】:

      当您在附加的事件处理程序中注册您的依赖属性时,您可以这样做。请在下面找到依赖属性的语法以及如何在 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
      }
      

      【讨论】:

      • -1 OP 询问的是关于附加到其他人编写的属性,而不是如何创建新属性。
      • 虽然选择的答案确实是该情况的正确选择,但 VS1 的答案正是我所需要的。我不会对他的回答投赞成票,但我确实想承认他的回答帮助某人解决了现实世界中的问题。
      猜你喜欢
      • 1970-01-01
      • 2014-06-29
      • 1970-01-01
      • 2017-11-10
      • 2017-07-01
      • 2015-07-15
      • 2016-03-12
      • 2018-02-10
      • 2014-01-11
      相关资源
      最近更新 更多