我有以下场景(我正在使用Silverlight4 Beta):
UserControl A: - > DataContext是MyModel类的对象,它包含属性Property01(CustomClass),Property02(CustomEnum)。 MyModel类实现了INotifyPropertyChanged,并且所有属性都在调用时调用PropertyChanged事件。
UserControl B: - > DataContext必须是类型的对象(CustomClass) - >类型为(CustomEnum)的DependencyProperty MyProperty
我的UserControlA将包含一个UserControlB,我想以下列方式绑定属性(来自XAML):
-> UserControlB.DataContext = UserControlA.DataContext.Property01
-> UserControlB.MyProperty = UserControlA.DataContext.Property02
<!-- DataContext = MyModel -->
<Grid x:Name="LayoutRoot">
<foo:UserControlB x:Name="xpto" DataContext="{Binding Property01}" MyProperty="{Binding Property02}" />
</Grid>
如上所述,将UserControlB的DataContext设置为正确的值,但UserControlB.MyProperty上的绑定永远不会发生。 如果我删除语句DataContext =“{Binding Property01}”,那么将发生对UserControlB.MyProperty的绑定。
如果我做的事情再次符合Silverlight的普遍规律,有人可以解释一下: - )
非常感谢, 布鲁诺
答案 0 :(得分:1)
您的XAML设置方式目前是绑定:
-> UserControlB.DataContext = UserControlA.DataContext.Property01
-> UserControlB.MyProperty = UserControlB.DataContext.Property02
方式:
MyProperty="{Binding Property02}"
Works就是说我的DataContext上的属性“Property02”绑定了,如果我没有DataContext检查我的父DataContext,那么直到它找到一个DataContext为止。
如果DataContext没有名为“Property02”的属性,它不会继续在树上继续