2017-11-10 6 views
-1

私は、可視性プロパティに基づいて複数のusercontrolsを表示し、次のボタンがクリックされたときに次の可視コントロールを表示する必要があるシナリオがあります。すべてのusercontrolをstackpanelに追加しました。これは素晴らしい考えではないようですが、アプリケーションのパフォーマンスに影響すると思います。このシナリオを定義する最善の方法を導くのに役立つかもしれません。複数のusercontrol 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

あなたは解決しようとしている正確な問題は何ですか?それはまったく問題がないように聞こえますが、あなたはパフォーマンスについて懸念しています。パフォーマンスに問題がありますか? – GenericTeaCup

+0

はい、このコントロールがロードされ、datacontextがデータを取得すると、次のボタンを作成して、次のコントロールの表示が表示または折りたたまれているかどうかを確認する必要があります。次の制御。 –

+0

可視性を切り替えるのではなく、コントロールを動的に追加しようとしましたか? – GenericTeaCup

答えて

1

ちょうど最近、仕事で正確に同じことが実装されました。あなたのコードに適合したバージョンがありますので、参考にしてください。

のViewModel:

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

関連する問題