修改控件的数据上下文是一种好习惯吗?

Is it a good practice to modify the datacontext of a control?

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

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

我在修改数据上下文时看到的问题是,由于数据上下文修改发生在 C# 中而不是 xaml 中,因此很难知道此控件可以绑定到 xaml 中的什么。 =11=]

编辑

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

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

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

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

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