2017-06-29 2 views
-1

Ich habe Ansichten, die möglicherweise in XAML erstellt werden oder nicht, basierend auf einer booleschen Bedingung in Codebehind oder einem Viewmodel.Bedingte Ansicht in XAML erstellen?

Ich möchte so etwas wie zu tun:

<AlwaysVisibleView /> 

<IfShowSometimesViewBindingOrVariableOrSomething> 
<SometimesView AProperty="something"/> 
</IfShowSometimesViewBindingOrVariableOrSomething> 

Ich mag würde dies zu vermeiden Code-Behind und andere solche Tricks so viel wie möglich zu implementieren, in letzter idealerweise möchte ich nicht die Ansicht instanziiert werden.

+0

Sie können einen Content verwenden, finden Sie Antworten auf https: // stackoverflow.com/questions/9359364/datatrigger-on-contentpresenter-content-not-working Diese Lösung sollte wahrscheinlich nur verwendet werden, wenn Sie die Eigenschaft zur Laufzeit ändern können. Ich schätze, dass es gut ist, ein Kind im Codebehind anzuhängen, wenn sich das Steuerelement während der Laufzeit nicht ändert. –

Antwort

1

Dynamische Erstellung von Ansichten kann manchmal ein wenig schwierig werden. Außerdem neigen sie dazu, zu vermasseln, wie XAML die Dinge rendert.

Können Sie die Sichtbarkeit der "Manchmal sichtbare Ansicht" nur an eine Eigenschaft binden? Sie können das durch einen booleschen zu Sichtbarkeitskonvertierer ausführen und einfach den Code dahinter haben, um das bool zum Ein-/Ausblenden zu schalten.

Example thread

1

Sie können mit ContentControl arbeiten und Style.Triggers Inhalt und Sichtbarkeit zu ändern, basierend auf einer Eigenschaft (Beispiel: bool ShowMe):

<ContentControl> 
    <ContentControl.Style> 
     <Style TargetType="ContentControl"> 
      <Setter Property="Content" Value="{x:Null}"/> 
      <Setter Property="Visibility" Value="Collapsed"/> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding ShowMe}" Value="True"> 
        <Setter Property="Content"> 
         <Setter.Value> 
          <SometimesView AProperty="something"/> 
         </Setter.Value> 
        </Setter> 
        <Setter Property="Visibility" Value="Visible"/> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </ContentControl.Style> 
</ContentControl> 
Verwandte Themen