Как вызвать изменение стиля, если DataContext имеет значение null или не использует WPF - PullRequest
11 голосов
/ 13 ноября 2008

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

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

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

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

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

1 Ответ

18 голосов
/ 13 ноября 2008

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...