我正在尝试根据数据触发器切换内容呈现器的内容。如果我有一个已设置的值,我想在contentpresenter.content中显示一个用户控件,否则我需要显示一个错误消息。但是我的数据触发器绑定失败,指出找不到属性。我无法让数据上下文继承进行数据触发器检查。使用注释代码可以使其正常工作。但我很困惑为什么它不能按照正常方式工作。
<ContentPresenter.Style>
<Style TargetType="{x:Type ContentPresenter}">
<Setter Property="Content" Value="{Binding UC}"/>
<Style.Triggers>
<!--<DataTrigger Binding="{Binding DataContext.HasValue,RelativeSource={RelativeSource AncestorType={x:Type ContentPresenter}}}" Value="false">
<Setter Property="Content" Value="No preview"/>
</DataTrigger>-->
<DataTrigger Binding="{Binding HasValue}" Value="false">
<Setter Property="Content" Value="No value"/>
</DataTrigger>
</Style.Triggers>
</Style>
</ContentPresenter.Style>
</ContentPresenter>
{Binding HasValue}
触发器不起作用,因为ContentPresenter.DataContext
被设置为ContentPresenter.Content
的值。所以一旦内容被设置为ViewModel.UC
值,它会尝试查找UC.HasValue
而不是ViewModel.HasValue
,并且可以理解地失败。出于同样的原因,相对源方法有效。这些信息可以在您提供的第一个链接下找到,但我认为在您的答案中明确指出这一点会很有用。 - Grx70