2008-11-19 11 views
6

Mam stronę karty, która powinna być ukryta, jeśli właściwość (BlahType) jest ustawiona na 1 i wyświetlana, jeśli jest ustawiona na 0. To jest to, co I CHCESZ zrobić:Jak selektywnie ustawić "Widoczność" elementu TabItem przez DataBinding/Triggers

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

problem jest, otrzymuję ten błąd:

"Triggers collection members must be of type EventTrigger" 

Jeśli google, że błąd, zobaczysz, że Dr. WPF explains the error. Czy istnieje czysty sposób na robienie tego, co próbuję tutaj osiągnąć?

Odpowiedz

13

Wierzę, że kolekcja wyzwalaczy kontrolki obsługuje obecnie tylko EventTriggers. Jeśli chcesz użyć DataTriggera, po prostu umieść go wewnątrz stylu, na przykład:

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

Masz drobną literówkę ... "" powinno być "" ... to świetnie, dzięki! –

+0

Dobrze, dzięki, że to odebraliście! –

0

Nie można tego zrobić za pomocą wyzwalaczy (chyba że znajdujesz się w DataTemplate, ControlTemplate lub Style).

Możesz to zrobić za pomocą wiązania, musisz napisać niestandardowy ValueConverter, który będzie tłumaczyć od 0/1 do widocznego/ukrytego, a następnie możesz powiązać właściwość widoczności z właściwością BlhaType.

Albo możesz ustawić Widoczność w kodzie i zrezygnować z podejścia opartego na XAML (to, co bym zrobił).

Powiązane problemy