如何确定更改了DependencyProperty的内容

时间:2010-11-30 15:10:58

标签: c# silverlight dependency-properties

我有两个绑定到同一dependencyProperty的对象(在Silverlight中)。 有没有办法确定这两个对象中的哪一个改变了属性? 我想根据这些信息采取不同的行动。

不幸的是,我无法附加两个不同的eventHandler(because it's a dependencyProperty

   public int StartTime
    {
        get { return (int)GetValue(StartTimeProperty); }
        set { SetValue(StartTimeProperty, value); }
    }
    public static readonly DependencyProperty StartTimeProperty =
        DependencyProperty.Register("StartTime", typeof(int), typeof(Step),
        new PropertyMetadata(-1, new PropertyChangedCallback(OnStartTimeChanged)));

    private static void OnStartTimeChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        ((Step)d).OnStartTimeChanged(e);
    }

    protected virtual void OnStartTimeChanged(DependencyPropertyChangedEventArgs e)
    {
        //if set from obj1 -> do something
        //if set from obj2 -> do something else
    }

在这个例子中,我将从不同的对象设置StartTime属性,我想知道这些对象中的哪一个改变了属性。

由于

3 个答案:

答案 0 :(得分:3)

你可以:

  • 查看事件处理程序中的发件人
  • 将两个控件附加到不同的事件处理程序

答案 1 :(得分:2)

我最终在控件上捕获了mouseDown事件,因此我知道用户界面更改了dependencyProperty的值。它不是最干净的解决方案,但它有效。

非常感谢您的所有建议。

答案 2 :(得分:-1)

var descriptor = DependencyPropertyDescriptor.FromProperty(YourType.StartTimeProperty , tpeof(YourType));
descriptor.AddValueChanged(obj1, OnStartTimeChanged1);
descriptor.AddValueChanged(obj2, OnStartTimeChanged2);