修改控件的数据上下文是一种好习惯吗?
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的复杂度取决于应用的复杂度)
如果我正在创建一个新控件并且我需要访问它之外的东西,修改数据上下文是一个好习惯还是我应该像这样使用相对数据绑定:
{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的复杂度取决于应用的复杂度)