2016-05-03 7 views
1

Ich habe eine StackPanel, die eine TextBox mit einem Titel und eine ItemsControl mit Elementen enthält. Ich möchte das gesamte StackPanel ausblenden, wenn die Liste leer ist. Anstatt einen dedizierten Converter für die Bindung zu schreiben, wollte ich QuickConverter (https://quickconverter.codeplex.com/) ausprobieren. QuickConverter ermöglicht die Verwendung von Inline-C# -Ausdrücken in Bindungen.WPF QuickConverter: Element in der leeren Liste ausblenden

Das ist also mein Aufschlag:

<StackPanel Visibility="{qc:Binding '$P > 0 ? Visibility.Visible : Visibility.Collapsed', P={Binding Path=Value.Count}}"> <!-- this does not work. It's always shown, regardless of the element count --> 
    <TextBlock Text="{qc:Binding '$P', P={Binding Path=Value.Count}}"></TextBlock> <!-- for debugging purposes only. It correctly shows the element count for the list --> 
    <TextBlock Text="{qc:Binding '$P.Count', P={Binding Path=Value}}"></TextBlock> <!-- for debugging purposes only. It should do the same as the line above, but it does nothing --> 

    ... 

    <ItemsControl ItemsSource="{Binding Path=Value}"> 
    ... 
    </ItemsControl> 
</StackPanel> 

Der erste Textblock wird das erwartete Ergebnis angezeigt wird, wird alle andere QuickConverter Ausdrücke arbeiten scheitern. Es gibt keine Fehler oder Ausnahmen, weder zur Entwurfszeit noch zur Laufzeit.

Vielen Dank für Ihre Ideen.

Chris.

+0

Sie verwenden ** ** Trigger, wenn Sie verstecken ** ** Stackpanel ohne Konverter – Amine

+0

gesamte möchte ich verwendet habe, dass in Situationen, in denen ich benötigt, um den Container der Elemente zu verstecken. Aber ich weiß nicht, wie ich die Eltern des Containers ansprechen soll. Ich zögere, ihm einen Namen zu geben, da sich das StackPanel selbst in der DataTemplate eines ItemsControls befindet, so dass sein Name nicht eindeutig ist. – Christophe

+0

das ItemsControl ist nicht eindeutig? – Amine

Antwort

0

Sie eine DataTrigger in einem Style wie diese haben:

<StackPanel> 
    <StackPanel.Style> 
     <Style TargetType="StackPanel"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding Value.Count}" Value="0"> 
        <Setter Property="Visibility" Value="Collapsed"/> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </StackPanel.Style> 
    ... 
</StackPanel> 
+0

So einfach. Ich weiß nicht, warum ich nicht daran gedacht habe. Danke vielmals! – Christophe

+0

Als Antwort markiert, weil es mir das gewünschte Ergebnis gebracht hat. Obwohl ich immer noch interessiert wäre, warum mein QuickConverter-Ausdruck nicht funktioniert hat. – Christophe