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

发布于 2024-07-25 11:21:24 字数 328 浏览 6 评论 0原文

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

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

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

I wrote a custom Silverlight 3 control that uses a class as its data context (MVVM pattern). I want to place this control on another control (form) through XAML. The child control exposes a Dependency Property that when set through XAML, will make it show detailed info.

So an example is that the child control shows order details data, and I want to place it on a form that show user orders. When you select an order, the selected item value on the parent control (orders list), is data bound to the child control, to show details.

The problem is that the child control’s dependency property's OnChanged handler never gets called. If I do not set a data context on the child (so it uses the parent's data context) all works fine, but when I set a different data context, it breaks down.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

穿越时光隧道 2024-08-01 11:21:24

理想情况下,您的 ViewModel 将用于外部 UserControl,并且 ViewModel 上的属性将是内部/子用户控件的 DataContext

Ideally, your ViewModel would be for the outer UserControl and a property on the ViewModel will be the DataContext of the Inner/Child userControl

掀纱窥君容 2024-08-01 11:21:24

确实,当设置父控件的 DataContext 时,它会向下传播到其所有子控件。 但是子控件可以选择通过设置自己的 DataContext 来覆盖此行为(您在示例中似乎正在这样做)。 因此,根据首选项规则,子控件的 DataContext 被赋予更多首选项,因此它会覆盖父控件的 DataContext。 此外,由于子级的 DataContext 在初始设置后永远不会更改,因此 DP 永远不会被调用。

Its true that when the Parent control's DataContext is set, it is propogated down to all its child controls. But the child control has an option of overriding this behavior by setting its own DataContext (which you seem to be doing in your example). Hence by the rule of preferences, the child control's DataContext is given more preference and thus it overrides the parent's one. Also since the child's DataContext never changes after it's initially set, the DP never gets invoked.

你与昨日 2024-08-01 11:21:24

所以我更多地思考了这个问题,我明白发生了什么,但我认为这非常令人困惑,而且做得不对。 如果我在主页上的控件上进行数据绑定,它应该使用该页面的上下文来进行绑定。 我在控件内部进行的绑定应该使用控件的上下文。

现在,无论我将绑定表达式放在哪里,它的工作方式都会使用控件的上下文(除非我正在进行 E2E 绑定,否则它会使用主页的上下文)。 这对我来说很愚蠢。 但至少我现在明白了。

我使用元素到元素绑定解决了该问题,并使其正常工作。 我希望SL团队能够改变这种行为。

So I thought about this some more, and I understand what is happening, but I think its very confusing, and is not done right. If I am doing data binding on a control in the main page, it should use the context of that page to do the binding. And binding I do inside the control should use the control's context.

The way it works now uses the control's context no matter where I put the binding expression (unless I am doing E2E binding, then its using the main page's context). That is silly to me. But at least I understand it now.

I solved the problem using Element to Element binding, and got it to work. I hope the SL team would change this behavior.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文