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

时间:2011-12-26 10:34:45

标签: c# .net wpf

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

我的代码目前如此:

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

        return false;
    }

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

似乎我可以某种方式使用Binding.SourceUpdatedEvent,但是,因为它是一个附加的路由事件,我不知道如何从MarkupExtension订阅它。

谢谢!

2 个答案:

答案 0 :(得分:1)

查看this SO question

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

如果这不令人满意,你会看到反思(很多)。

答案 1 :(得分:0)

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

{Binding Mode=OneWayToSource}

或代码

binding.Mode = BindingMode.OneWayToSource;