如果DataContext为null或不使用WPF,如何触发样式更改

时间:2008-11-13 08:26:48

标签: wpf data-binding

我有一个包含多个控件的页面。控件绑定显示从页面的DataContext获取的值。我想要做的是在DataContext为null时显示页面的另一个外观。在某些情况下,如果设置了“他们的”属性,页面的控件应该以不同的方式显示。

是否可以创建绑定以查看是否设置了DataContext?

我所做的解决方法是向页面添加一个IsDataContextSet属性,并指定一个绑定:

Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Page}}, Path=IsDataContextSet}" Value="false"

这可以按照我的预期运作,但我觉得他们更优雅的方式来做到这一点。或至少或更多WPFish方式。

1 个答案:

答案 0 :(得分:18)

根据您描述的场景,我将使用样式和数据触发器设置属性。数据触发器将使用默认绑定,即数据上下文。

示例可能如下所示:

<Border>
    <Border.Style>
        <Style TargetType="Border">
            <Setter Property="Background"
                    Value="Orange" />
            <Style.Triggers>
                <DataTrigger Binding="{Binding}"
                             Value="{x:Null}">
                    <Setter Property="Background"
                            Value="Yellow" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Border.Style>
</Border>

除非数据上下文为空,否则边框将为橙色,在这种情况下背景为黄色。