C# 修改控件的datacontext是一种好的做法吗?

C# 修改控件的datacontext是一种好的做法吗?,c#,wpf,xaml,datacontext,C#,Wpf,Xaml,Datacontext,如果我正在创建一个新控件,并且我需要访问它之外的内容,那么修改datacontext是一种好的做法,还是应该像下面这样使用相对数据绑定: {Binding Path=PathToProperty, RelativeSource={RelativeSource AncestorType={x:Type typeOfAncestor}}} 我看到的修改datacontext的问题是,当datacontext修改发生在C#中而不是在xaml中时,要知道这个控件在xaml中可以绑定

如果我正在创建一个新控件,并且我需要访问它之外的内容,那么修改datacontext是一种好的做法,还是应该像下面这样使用相对数据绑定:

{Binding Path=PathToProperty, 
         RelativeSource={RelativeSource AncestorType={x:Type typeOfAncestor}}}
我看到的修改datacontext的问题是,当datacontext修改发生在C#中而不是在xaml中时,要知道这个控件在xaml中可以绑定到什么会让人感到困惑

编辑


让我重新表述这个问题,是否有任何技术原因可以解释为什么我应该或不应该修改控件的datacontext?

我想,如果您已经清楚地定义了可视化树,那么相对资源绑定是实际的,因此您可以预测控件或用户控件将放置在何处

此外,RelativeSource主要用于设置定义控件面的控件属性,但不用于显示控件中的业务信息

为了显示业务信息,有一种MVVM体系结构,它允许不同的控件使用不同的数据上下文。例如,您的应用程序可以包含有关客户、销售和交易的信息,因此您至少有三个DataContext。如果您想编辑客户信息-您将有另一个DataContext用于新窗口或UserControl


您可以为整个应用程序使用一个DataContext,但这种DataContext不灵活,很难扩展(当然,这种DataContext的复杂性取决于应用程序的复杂性)

您能详细说明一下“修改DataContext”是什么意思吗?只是为了澄清一下,您是在创建用户控件还是自定义控件?@Mike,将我控件的datacontext设置为应用程序的datacontext之外的其他内容。@Kevin,这有什么区别吗?我目前正在测试UserControls,但它可能是其中之一。@MaximeTremblay Savard个人认为,是的,它确实起到了作用。我个人认为,自定义
控件
不应依赖于其他对象的行为,也不应在
控件
中更改数据上下文。对于
用户控件
,我可以稍微灵活一点,但我不建议这样做。