【问题标题】:Is it a good practice to modify the datacontext of a control?修改控件的数据上下文是一种好习惯吗?
【发布时间】:2015-07-16 13:32:53
【问题描述】:

如果我正在创建一个新控件并且我需要访问它之外的东西,那么修改数据上下文是一个好习惯还是应该像这样使用相关数据绑定:

{Binding Path=PathToProperty, 
         RelativeSource={RelativeSource AncestorType={x:Type typeOfAncestor}}}

我在修改 datacontext 时看到的问题是,由于 datacontext 修改发生在 C# 而不是 xaml 中,因此知道此控件可以在 xaml 中绑定到什么变得令人困惑。

编辑

让我重新提出这个问题,我应该或不应该修改控件的数据上下文是否有任何技术原因?

【问题讨论】:

  • 您能否详细说明“修改数据上下文”的含义
  • 澄清一下,您是在创建UserControl 还是自定义Control
  • @Mike,将我的控件的数据上下文设置为应用程序的数据上下文之外的其他内容。
  • @Kevin,有什么不同吗?我目前正在测试 UserControls,但也可能是。
  • @MaximeTremblay-Savard 就个人而言,我会说是的,它确实有所作为。我个人认为自定义Control 永远不应该依赖于其他事物的行为,并且您永远不应该从Control 中更改DataContext。我可以使用UserControl 更灵活一点,但我不推荐这种行为。

标签: c# wpf xaml datacontext


【解决方案1】:

我想,如果您明确定义了可视化树,RelativeSource 绑定是实际的,因此您可以预测您的 Control 或 UserControl 将放置在哪里。

另外,RelativeSource 主要用于设置定义控件面的控件属性,而不是在控件中显示业务信息。

为了显示业务信息,有 MVVM 架构允许不同的 DataContexts 用于不同的控件。例如 - 您的应用程序可以包含有关客户、销售和交易的信息 - 因此您将至少拥有三个 DataContext。如果您想编辑客户信息 - 您将有另一个 DataContext 用于新的 Window 或 UserControl。

你可以为整个应用使用一个DataContext,但是这样的DataContext不够灵活,而且很难扩展(当然,这样的DataContext的复杂度取决于应用的复杂度)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-14
    • 1970-01-01
    • 2011-08-08
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 2015-04-02
    • 2019-11-07
    相关资源
    最近更新 更多