2017-11-10 8 views
-1

나는 가시성 속성을 기반으로 여러 usercontrols를 표시하고 다음 버튼을 클릭 할 때 다음에 보이는 컨트롤을 표시해야하는 시나리오가 있습니다. stackpanel에 모든 usercontrols를 추가했는데 좋은 생각이 아닌 것 같아서 응용 프로그램의 성능에 영향을 미친다고 생각합니다. 이 시나리오를 정의하는 최선의 방법을 안내하는 데 도움을 줄 수 있습니까?여러 usercontrol wpf에 대한 visibility 속성 사용

<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

해결하려는 정확한 문제는 무엇인가요? 전혀 문제가없는 것처럼 들리지만 성능에 대해서만 우려하고 있습니다. 성능 문제가 있습니까? – GenericTeaCup

+0

예, 페이지가로드 될 때이 컨트롤이로드되고 datacontext가 데이터를 가져 오는 경우 다음 버튼을 만들면 다음 컨트롤이 보이지 않거나 접혀 있는지 확인해야합니다. 다음 컨트롤. –

+0

가시성을 전환하는 대신 동적으로 컨트롤을 추가하려고 시도 했습니까? – GenericTeaCup

답변

1

최근에는 직장에서 정확히 같은 것을 구현했습니다. 여기에 코드에 맞는 버전이 있습니다. 도움이 되었기를 바랍니다.

뷰 모델 :

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

나는 또한 현재 XAML 코드에 대한 몇 가지 미묘한 업데이트가이 제대로 작동하는지 확인하기 위해 할 것입니다! 당신의 바인딩을 확인한다 이 형식으로되어 있습니다 :

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

항목의 기본 상태를 설정함으로써, 눈에 보이지 않는 것 (분명히 섹션 1 Visibility.Visible, 숨겨지지하게!). PropertyChanged 이벤트에 익숙하다면, 특정 섹션의 가시성이 변경되었을 때이를 사용하여 뷰를 알리는 것이 좋습니다. 익숙하지 않다면 다시 의견을 말하면 코드에 대한 구현 예제를 제공 할 것입니다.

감사합니다. 도움이 되었기를 바랍니다.

+1

완벽 하 고, 감사합니다 :) –

+0

내 기쁨, 다행 그것 도움이! – PeripherySilence

관련 문제