Como posso definir seletivamente a “visibilidade” de um TabItem via DataBinding / disparadores

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

  •  08-07-2019
  •  | 
  •  

Pergunta

Eu tenho uma página da guia que deve ser escondido, se uma propriedade (BlahType) é definido como 1 e mostrado Se definido como 0. Isso é o que eu Deseja fazer:

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

O problema é, eu recebo este erro:

"Triggers collection members must be of type EventTrigger"

Se você Google que o erro, você verá que Dr. WPF explica o erro . Existe uma maneira limpa para fazer o que eu estou tentando alcançar aqui?

Foi útil?

Solução

Eu acredito que a coleção Triggers de um controlo só suporta atualmente eventtriggers. Se você gostaria de usar um DataTrigger simplesmente colocá-lo dentro de um estilo, para o seu exemplo:

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

Outras dicas

Bem, você não pode fazer isso usando gatilhos (a não ser que você está dentro de um DataTemplate, ControlTemplate ou um Style).

Você pode fazer isso usando uma ligação, você terá que escrever um personalizado ValueConverter que irá traduzir entre 0/1 a Visible / Invisível e, em seguida, você pode vincular a propriedade Visibilidade para a propriedade BlhaType.

Ou você pode apenas definir a visibilidade no código e desistir de uma abordagem baseada em XAML (que o que eu teria feito).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top