我有一个使用WPF用户控件的WPF应用程序。
用户控件在我的WPF应用程序中公开了我想要绑定到的DependencyProperty。
只要我的用户控件没有设置自己的DataContext,这就行了,我能够听取DependencyProperty中的更改。
但是,当我设置DataContext时,调用的PropertyChanged为null。
我在这里缺少什么?
代码示例: https://skydrive.live.com/redir.aspx?cid=367c25322257cfda&page=play&resid=367C25322257CFDA!184
答案 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。
这样我就不会在用户控件中使用任何绑定,而是使用在主应用程序中绑定的依赖属性。