如何从模板中访问主DataContext

时间:2020-06-18 03:27:11

标签: c# wpf datatemplate

摘要

我在数据模板中有一个要绑定到主数据上下文某些属性的元素。 我意识到在这种特定情况下,最好使用其他解决方案(并且我有一个可以避免这种情况的可行解决方案),但是我怀疑这种问题可能会再次出现,并且我想知道在一般情况下该如何解决

以下是我的具体情况。

详细信息

数据层次结构:我有一个类型A的列表,每个A的实例都有一个类型B的列表,每个{{1 }}还有一些其他数据,包括用于文本日志的B

UI结构:我有一个string来选择类型为ComboBox的项目。我有一个A,其中的选项卡代表类型为TabControl的项目,取自上面所选的B。在每个选项卡中,都有一种输入数据的方法来填充类型为A的对象,还有一个日志,表示对该B实例的更改。

后勤逻辑:我使用属性(BSelectionA,在数据上下文SelectionB)中跟踪每个列表中的选定项目,这些属性会在它们更改。 MainWindowViewModel对象还通知其日志文本何时更改。这些可确保UI响应对后备数据的更改。

问题:我想将通知逻辑全部移到一个位置(B,即DataContext),而不是放在{{1 }}类,需要复制通知逻辑。为此,我添加了一个属性(MainWindowViewModel)来跟踪B对象的SelectionBLogText属性,并将日志(在模板化的选项卡中)绑定到主{{1} }属性。问题在于,在选项卡页中,我似乎只能绑定到所选LogText对象的属性(从所选选项卡),而我需要绑定到SelectionB的属性。我已经尝试过使用SelectionBLogText,但到目前为止我都没有尝试过,但是我看文档越多,就越觉得它是为其他工作而设计的。

XAML(已删除无关的信息):

B

以及背后的代码:

DataContext

1 个答案:

答案 0 :(得分:1)

使用相对绑定时是否尝试过类似的方法?如果没有,请检查一下。

     <TextBox IsReadOnly="True"
             Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window},
             Path=Datacontext.SelectionBLogText}"/>