订阅自定义MarkupExtension中Binding类的事件

本文关键字:事件 Binding 自定义 MarkupExtension | 更新日期: 2023-09-27 18:18:45

我正在编写一个能够接受PropertyPath的MarkupExtension。我希望能够订阅给定属性PropertyPath的"更改"事件(无论是DependencyProperty还是通过INotifyPropertyChanged更新的事件)而没有实际调用源属性。

我的代码现在看起来像这样:

    public override object ProvideValue(IServiceProvider serviceProvider)
    {
        var binding = new Binding();
        binding.Path = Path;
        ...
        return false;
    }

但是我不确定如何继续从绑定对象中获取通知更改。如果我将绑定连接到任何DependencyProperty,它将自动调用源属性getter,这是我试图避免的。

似乎我可以使用绑定。SourceUpdatedEvent,然而,因为它是一个附加的路由事件,我不确定如何从MarkupExtension订阅它。

谢谢!

订阅自定义MarkupExtension中Binding类的事件

看看这个SO问题

这个想法是用一个DP创建一个类,提供它并让WPF处理属性路径,然后检索出来的值。

如果这还不能让你满意,你在看反射(很多)

如果绑定和依赖属性是您的解决方案,并且您担心不调用getter,您可以将绑定模式指定为OneWayToSource.

{Binding Mode=OneWayToSource}

或者代码

binding.Mode = BindingMode.OneWayToSource;