2011-12-26 52 views
0

我在写一个能够接受PropertyPath的MarkupExtension。我希望能够订阅给定属性PropertyPath的“更改”事件(DependencyProperty或通过INotifyPropertyChanged更新的事件)而不是实际上调用了源属性。在自定义MarkupExtension中订阅绑定类的事件

我的代码目前看起来像这样:

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

     return false; 
    } 

但我不知道如何继续获得来自绑定对象更改通知。如果我将绑定连接到任何DependencyProperty,它将自动调用源属性getter,这正是我想要避免的。

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

谢谢!

回答

0

如果绑定和DependancyProperty是你的解决方案,你担心不调用吸气,你可以指定绑定模式OneWayToSource.

{Binding Mode=OneWayToSource} 

或者在代码

binding.Mode = BindingMode.OneWayToSource; 
+0

我不认为他的意思是使用XAML – 2011-12-26 12:26:39

+0

他可以很容易地在代码中设置绑定。关键是使用'Mode = OneWayToSource' – 2011-12-26 12:33:38

+0

即使您的解决方案无法解析PropertyPath以订阅更改。 – 2011-12-26 12:35:17

1

乘坐看看this SO question

这个想法是用一个DP做一个类,给它一个并让WPF处理propertypath,然后retri前夕的价值。

如果这并不令人满意,那么您正在考虑反思(很多)。

+0

感谢您的意见。我看到了这个问题,但问题是我试图得到Source更改的通知,而没有实际调用源的getter。这个解决方案的问题是绑定到PropertyPath的DP实际上会检索该值,而我只是想知道该值已更改。 – VitalyB 2011-12-27 07:17:07