2017-11-10 2 views
-1

Ich habe ein Szenario, in dem ich mehrere Benutzersteuerelemente basierend auf ihrer Sichtbarkeitseigenschaft anzeigen und das nächste sichtbare Steuerelement anzeigen muss, wenn auf die nächste Schaltfläche geklickt wird. Ich habe alle Benutzersteuerelemente in einem Stackpanel hinzugefügt, was keine gute Idee zu sein scheint und ich denke, dass es die Leistung der Anwendung beeinflusst. Könnte mir jemand helfen, den besten Weg zu finden, dieses Szenario zu definieren?Verwenden der Sichtbarkeitseigenschaft für mehrere Benutzersteuerelemente wpf

<StackPanel Grid.Row="3" Grid.Column="0" Margin="4 4 28 0" ScrollViewer.CanContentScroll="True"> 
       <Border BorderThickness="3" BorderBrush="LightGray" > 
        <StackPanel> 
        <controls:ICUC x:Name="ICU" BorderBrush="CadetBlue" Visibility="{Binding Visibilityicuc}" ScrollViewer.VerticalScrollBarVisibility="Visible" Foreground="Black" VerticalAlignment="Center" Height="210" /> 
         <controls:J1939 x:Name="J1939eng" BorderBrush="CadetBlue" Visibility="{Binding Visibilityj1939}" ScrollViewer.VerticalScrollBarVisibility="Visible" Foreground="Black" VerticalAlignment="Center" Height="210" /> 
        <controls:p_code x:Name="pcodengg" BorderBrush="CadetBlue" Visibility="{Binding Visibilitypcode}" ScrollViewer.VerticalScrollBarVisibility="Visible" Foreground="Black" VerticalAlignment="Center" Height="210" /> 
         <controls:Diagnostic_Developer x:Name="diagdev" BorderBrush="CadetBlue" Visibility="{Binding Visibilitysgdd}" ScrollViewer.VerticalScrollBarVisibility="Visible" Foreground="Black" VerticalAlignment="Center" Height="Auto" Width="Auto"/> 
        </StackPanel> 
       </Border> 
      </StackPanel> 
+0

Was ist das genaue Problem, das Sie versuchen zu lösen? Es hört sich so an, als gäbe es überhaupt kein Problem, Sie sind nur um die Leistung besorgt. Haben Sie ein Leistungsproblem festgestellt? – GenericTeaCup

+0

Ja, wenn die Seite geladen wird, werden alle Steuerelemente geladen, und ihr Datenkontext erhält die Daten. Ich möchte eine nächste Schaltfläche erstellen, die beim Klicken darauf prüft, ob die nächste Sichtbarkeit der Steuerelemente sichtbar oder ausgeblendet ist nächste Kontrolle. –

+0

Haben Sie versucht, das Steuerelement dynamisch hinzuzufügen, anstatt die Sichtbarkeit zu ändern? – GenericTeaCup

Antwort

1

Gerade vor kurzem implementiert genau das gleiche bei der Arbeit. Hier ist eine angepasste Version für Ihren Code, hoffe, es ist hilfreich.

Ansichtsmodell:

public class ExampleClass 
{ 
    private int section { get; set; } 

    public Visibility Visibilityicuc { get; set; } //presume first section 
    public Visibility Visibilityj1939 { get; set; } //presume second section 
    public Visibility Visibilitypcode { get; set; } //presume third section 
    public Visibility Visibilitysgdd { get; set; } //presume fourth section 

    public DelegateCommand NextButtonDelegateCommand { get; set; } 

    public ExampleClass() 
    { 
     NextButtonDelegateCommand = new DelegateCommand(Next); 
     section = 1; //indicates in first section 
    } 

    private void SetSectionVisibility(int currSection) 
    { 
     if (currSection == 1) // if first section 
     { 
      Visibilityicuc = Visibility.Visible; //section 1 
      Visibilityj1939 = Visibility.Hidden; 
      Visibilitypcode = Visibility.Hidden; 
      Visibilitysgdd = Visibility.Hidden; 
     } 
     else if (currSection == 2) 
     { 
      Visibilityicuc = Visibility.Hidden; 
      Visibilityj1939 = Visibility.Visible; //section 2 
      Visibilitypcode = Visibility.Hidden; 
      Visibilitysgdd = Visibility.Hidden; 
     } 
     else if (currSection == 3) 
     { 
      Visibilityicuc = Visibility.Hidden; 
      Visibilityj1939 = Visibility.Hidden; 
      Visibilitypcode = Visibility.Visible; //section 3 
      Visibilitysgdd = Visibility.Hidden; 
     } 
     else if (section == 4) 
     { 
      Visibilityicuc = Visibility.Hidden; 
      Visibilityj1939 = Visibility.Hidden; 
      Visibilitypcode = Visibility.Hidden; 
      Visibilitysgdd = Visibility.Visible; //section 4 
     } 
    } 

    private void Next() 
    { 
     if (section == 1) 
      SetSectionVisibility(2); //move to next section 
     else if (section == 2) 
      SetSectionVisibility(3); 
     else if (section == 3) 
      SetSectionVisibility(4); 
     //else if (section == 4) 
      //end! special event? unsure 
    } 
} 

ich auch richtig tut Code würde ein paar subtilen Änderungen an Ihrem aktuellen XAML, um sicherzustellen, das funktioniert! Das heißt, Ihre Bindungen gewährleisten sind in diesem Format:

Visibility="{Binding Visibilityicuc, Mode=TwoWay, Fallbackvalue=Visibility.Hidden}"  

Durch den Standardstatus des Elements einstellen, wird es unsichtbar sein (natürlich Abschnitt 1 Visibility.Visible, nicht verborgen machen!). Wenn Sie mit PropertyChanged-Ereignissen ebenfalls vertraut sind, empfehle ich Ihnen, sie zu verwenden, um Ihre Ansicht zu benachrichtigen, wenn sich die Sichtbarkeit eines bestimmten Abschnitts geändert hat. Wenn Sie nicht vertraut sind, kommentieren Sie zurück und ich gebe Ihnen ein implementiertes Beispiel für Ihren Code.

Danke! Hoffe, das war hilfreich

+1

Perfekt, Danke :) –

+0

Mein Vergnügen, froh, dass es geholfen hat! – PeripherySilence

Verwandte Themen