Как вызвать изменение стиля, если DataContext имеет значение null или не использует WPF

У меня есть страница с несколькими элементами управления. Элементы управления привязаны к отображению значений, которые они получают из страницы DataContext. То, что я хотел бы сделать, это показать другой вид страницы, если DataContext будет нулевым. В некоторых случаях элементы управления страницы должны отображаться по-разному, если установлено свойство "их" или нет.

Можно ли создать привязку, чтобы увидеть, установлен ли DataContext?

Что я сделал в качестве обходного пути, так это добавить свойство IsDataContextSet на страницу и указать привязку как:

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

Это работает так, как я ожидаю, но у меня есть ощущение, что их более элегантный способ сделать это. Или по крайней мере или более WPFish способом.

Ответ 1

Учитывая описанный вами сценарий, я бы установил свойства со стилем и триггером данных. Триггер данных будет использовать привязку по умолчанию, которая является контекстом данных.

Пример может выглядеть так:

<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>

Граница будет оранжевой, если контекст данных не равен нулю, и в этом случае фон будет желтым.