在更改Dependency属性的绑定时通知

时间:2014-04-07 10:08:33

标签: c# .net wpf

我需要调试给定依赖项属性的Binding设置。 在开始时,我使用以下代码将绑定设置为给定源实例的依赖项属性:

var binding = new Binding(path);
            binding.Source = source;
            binding.Mode = twoWay ? BindingMode.TwoWay : BindingMode.OneWay;
            binding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
            binding.Converter = valueConverter;
            var bindingResult = BindingOperations.SetBinding(this, ModelValueProperty, binding);

            var bindingExpression = BindingOperations.GetBindingExpression(this, ModelValueProperty);

bindingExpression不为null且绑定状态为Active。 经过一些视图操作后,当我尝试获取bindingExpression时,它将为null。 如何捕获给定依赖项属性上的绑定替换或更改?

修改 换句话说,我想知道当bindingExpression将其状态从Active更改为Detached时如何获得通知

1 个答案:

答案 0 :(得分:0)

您需要设置此属性:

binding.NotifyOnSourceUpdated = true

并注册到您所绑定的控件的SourceUpdated事件(在您的情况下,它是this):

        this.SourceUpdated += (s, args) =>
                                  {
                                      // Catch changes there
                                  };

或者,您可以使用DependencyProperty直接在DependencyPropertyDescriptor上捕捉所做的更改:

            var descriptor =  DependencyPropertyDescriptor.FromProperty(ModelValueProperty, typeof(YourType));
            descriptor.AddValueChanged(this, OnValueChanged);


            private void OnValueChanged(object sender, EventArgs e)
            {
                //...
            }