我有一个包含 ContentControl 的视图,它的 ContentTemplate 使用数据触发器根据视图模型中的布尔属性动态更改。
<ContentControl>
<!-- MyFirstControl user control by default-->
<local:MyFirstControl/>
<ContentControl.Style>
<Style TargetType="ContentControl">
<Style.Triggers>
<DataTrigger Binding="{Binding IsSelected}"
Value="True">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<!-- Different user control when trigger fired-->
<local:MySecondControl />
</DataTemplate>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</ContentControl.Style>
</ContentControl>
MySecondControl 用户控件(在触发触发器时显示)旨在显示一个文本块,其 Text 属性也绑定到同一视图模型中的一个属性。
我显然错了,但我的想法是触发控件将继承相同的数据上下文。相反,它试图使用 MyFirstControl 用户控件作为其数据上下文(我也收到此错误:System.Windows.Data Error: 40 : BindingExpression path error:)。
我试图明确声明触发控件的数据上下文:
<local:MySecondControl DataContext="{Binding}"/>
但是,它仍然使用默认控件 (MyFirstControl) 作为其数据上下文。
我的问题是,如何强制触发控件使用与它所在的视图文件相同的数据上下文?
我对 WPF 场景相当陌生,所以我希望这是有道理的!
提前致谢。