当依赖项属性的绑定发生更改时通知

本文关键字:通知 绑定 依赖 属性 | 更新日期: 2023-09-27 17:57:20

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

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);

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

编辑:换句话说,我想知道如何在绑定表达式将其状态从活动更改为已分离时收到通知

当依赖项属性的绑定发生更改时通知

您需要设置此属性:

binding.NotifyOnSourceUpdated = true

并注册到绑定到的控件的SourceUpdated事件(在你的例子中,它是this):

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

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

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

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