如果我正在创建一个新控件并且我需要访问它之外的东西,修改datacontext是一个好习惯,还是应该使用这样的相对数据绑定:
{Binding Path=PathToProperty,
RelativeSource={RelativeSource AncestorType={x:Type typeOfAncestor}}}
我在修改datacontext时遇到的问题是,如果在C#中进行datacontext修改而不是在xaml中,那么知道这个控件可以在xaml中绑定是多么令人困惑。
修改
让我重新阐述这个问题,是否有任何技术原因我应该或不应该修改我控制的数据文字?
答案 0 :(得分:1)
我想,如果您有明确定义的可视化树,则RelativeSource绑定是实际的,因此您可以预测Control或UserControl的放置位置。
此外,RelativeSource主要用于设置定义控制面的控件属性,但不用于显示控件中的业务信息。
为了显示业务信息,MVVM架构允许不同的DataContexts用于不同的控件。例如 - 您的应用程序可以包含有关客户,销售和交易的信息 - 因此您将至少拥有三个DataContexts。如果要编辑客户信息 - 您将拥有另一个用于新窗口或UserControl的DataContext。
你可以为整个应用程序使用一个DataContext,但是这样的DataContext不灵活,并且很难扩展它(当然,这种DataContext的复杂性取决于应用程序的复杂性)