订阅自定义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订阅它。
谢谢!
看看这个SO问题
这个想法是用一个DP创建一个类,提供它并让WPF处理属性路径,然后检索出来的值。
如果这还不能让你满意,你在看反射(很多)
如果绑定和依赖属性是您的解决方案,并且您担心不调用getter,您可以将绑定模式指定为OneWayToSource.
{Binding Mode=OneWayToSource}
或者代码
binding.Mode = BindingMode.OneWayToSource;