Как я могу выборочно установить «Видимость» TabItem через DataBinding / Triggers

StackOverflow https://stackoverflow.com/questions/302312

  •  08-07-2019
  •  | 
  •  

Вопрос

У меня есть вкладка, которая должна быть скрыта, если для свойства (BlahType) установлено значение 1 и показано, если установлено значение 0. Это то, что я ХОЧУ сделать:

<TabItem Header="Blah">
    <TabItem.Triggers>
        <DataTrigger Binding="{Binding BlahType}" Value="0">
            <Setter Property="TabItem.Visibility" Value="Hidden" />
        </DataTrigger>
    </TabItem.Triggers>
</TabItem>

Проблема в том, что я получаю эту ошибку:

"Triggers collection members must be of type EventTrigger"

Если вы погуглите эту ошибку, вы увидите, что Доктор. WPF объясняет ошибку . Есть ли чистый способ сделать то, что я пытаюсь достичь здесь?

Это было полезно?

Решение

Я считаю, что коллекция элемента управления Triggers в настоящее время поддерживает только EventTriggers. Если вы хотите использовать DataTrigger, просто поместите его в стиль, например:

<TabItem Header="Blah">
    <TabItem.Style>
        <Style>
            <Style.Triggers>
                <DataTrigger Binding="{Binding BlahType}" Value="0">
                    <Setter Property="TabItem.Visibility" Value="Hidden" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </TabItem.Style>
</TabItem>

Другие советы

Ну, вы не можете сделать это с помощью триггеров (если только вы не находитесь внутри DataTemplate, ControlTemplate или Style).

Вы можете сделать это с помощью привязки, вам нужно написать собственный ValueConverter, который будет переводить между 0/1 и Visible / Hidden, а затем вы можете связать свойство Visibility со свойством BlhaType.

Или вы можете просто установить видимость в коде и отказаться от подхода, основанного на XAML (то, что я бы сделал).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top