SL3表单中的不同数据上下文

时间:2009-06-18 13:45:49

标签: silverlight data-binding silverlight-3.0 datacontext

我编写了一个自定义的Silverlight 3控件,它使用一个类作为其数据上下文(MVVM模式)。我想通过XAML将此控件放在另一个控件(窗体)上。子控件公开一个依赖属性,当通过XAML设置时,它将显示详细信息。

所以一个例子是子控件显示订单详细信息数据,我想将它放在显示用户订单的表单上。当您选择订单时,父控件(订单列表)上的所选项目值是绑定到子控件的数据,以显示详细信息。

问题是子控件的依赖属性的OnChanged处理程序永远不会被调用。如果我没有在子上设置数据上下文(所以它使用父数据上下文)一切正常,但是当我设置不同的数据上下文时,它就会崩溃。

3 个答案:

答案 0 :(得分:0)

理想情况下,您的ViewModel将用于外部UserControl,而ViewModel上的属性将是Inner / Child userControl的DataContext

答案 1 :(得分:0)

确实在设置Parent控件的DataContext时,它被传递到其所有子控件。但是,子控件可以选择通过设置自己的DataContext来覆盖此行为(您在示例中似乎正在执行此操作)。因此,通过偏好规则,子控件的DataContext被赋予更多的偏好,因此它覆盖了父控件的DataContext。此外,由于孩子的DataContext在最初设置后从未改变,因此DP永远不会被调用。

答案 2 :(得分:0)

所以我更多地考虑了这一点,并且我理解发生了什么,但我认为它非常令人困惑,并且做得不对。如果我在主页面中的控件上进行数据绑定,它应该使用该页面的上下文来进行绑定。我在控件中做的绑定应该使用控件的上下文。

它的工作方式现在使用控件的上下文,无论我在何处放置绑定表达式(除非我正在进行E2E绑定,然后使用主页面的上下文)。这对我来说很愚蠢。但至少我现在明白了。

我使用Element to Element绑定解决了问题,并使其工作。我希望SL团队会改变这种行为。