设置DataContext使UserControl中的PropertyChanged为null

时间:2011-08-04 16:49:33

标签: wpf dependency-properties datacontext inotifypropertychanged

我有一个使用WPF用户控件的WPF应用程序。

用户控件在我的WPF应用程序中公开了我想要绑定到的DependencyProperty。

只要我的用户控件没有设置自己的DataContext,这就行了,我能够听取DependencyProperty中的更改。

但是,当我设置DataContext时,调用的PropertyChanged为null。

我在这里缺少什么?

代码示例: https://skydrive.live.com/redir.aspx?cid=367c25322257cfda&page=play&resid=367C25322257CFDA!184

3 个答案:

答案 0 :(得分:0)

DependencyProperty具有继承属性,因此如果不设置UserControlDP的DataContext,则DataContext将继承自MainWindow的DataContext。在这种情况下,下面代码中的UserControlDP的DataContext设置为MainWindow_ViewModel。因此,正确执行绑定。

<usercontrol:UserControlDP Width="200" Height="100"
    TestValue="{Binding TestValueApp, Mode=TwoWay, NotifyOnSourceUpdated=True, NotifyOnTargetUpdated=True}"
    Margin="152,54,151,157"></usercontrol:UserControlDP>

在另一种情况下,UserControlDP的DataContext设置为UserControlDP_ViewModel,因此绑定被破坏。您可以在调试窗口中看到第一条异常消息,如下所示。

System.Windows.Data Error: 40 : BindingExpression path error: 'TestValueApp' property not found on 'object' ''UserControlDP_ViewModel' (HashCode=24672987)'. BindingExpression:Path=TestValueApp; DataItem='UserControlDP_ViewModel' (HashCode=24672987); target element is 'UserControlDP' (Name=''); target property is 'TestValue' (type 'Object')

答案 1 :(得分:0)

考虑在UserControl中包含的其中一个元素而不是UserControl本身上设置DataContext。

答案 2 :(得分:0)

感谢您的意见和澄清细节。

在考虑之后,我采取了简单的方法,从控件中删除了ViewModel。 应用程序的MVVM,但用户控件没有MVVM。

这样我就不会在用户控件中使用任何绑定,而是使用在主应用程序中绑定的依赖属性。