2017-01-24 7 views
-1

私はしばらくの間WPFを開発してきましたが、本当に迷惑なものがあります。私はいくつかの理由でいくつかのコンポーネントをvisibily変更するメソッドを実行する必要があり、コードは常に巨大で汚い取得します。コンポーネントを変更する簡単な方法可視性

これは単に私がIntegerUpDownの結果に応じてComboBoxアイテムの可視性を変更する方法の例である:

private void _numClass_LostFocus(object sender, RoutedEventArgs e) 
    {   

     if (_numClass.Value >= 2) 
     { 
      _segunda.Visibility = Visibility.Collapsed; 
      _terca.Visibility = Visibility.Collapsed; 
      _quarta.Visibility = Visibility.Collapsed; 
      _quinta.Visibility = Visibility.Collapsed; 
      _sexta.Visibility = Visibility.Collapsed; 
      _sabado.Visibility = Visibility.Collapsed; 

      _segundaQuarta.Visibility = Visibility.Visible; 
      _terçaQuinta.Visibility = Visibility.Visible; 
     } 
     else 
     { 
      _segunda.Visibility = Visibility.Visible; 
      _terca.Visibility = Visibility.Visible; 
      _quarta.Visibility = Visibility.Visible; 
      _quinta.Visibility = Visibility.Visible; 
      _sexta.Visibility = Visibility.Visible; 
      _sabado.Visibility = Visibility.Visible; 

      _segundaQuarta.Visibility = Visibility.Collapsed; 
      _terçaQuinta.Visibility = Visibility.Collapsed; 
     } 
    } 

はtiresomely repetingなし成分の比較的多量の可視性を変更する方法はありますこれらの "Visibily.Whatever"?

編集:ここにコードのXAMLがあります。しかしちょうど思い出して、私は、この場合だけでなく、より簡単な方法ですべてのコンポーネントの可視性を変更する方法が欲しいです。

 <ComboBox x:Name="cbxDate" HorizontalAlignment="Left" VerticalAlignment="Top" Width="214" Margin="526,200,0,0" SelectionChanged="cbxDate_SelectionChanged"> 
     <ComboBoxItem x:Name="_segunda" Content="Segunda"/> 
     <ComboBoxItem x:Name="_terca" Content="Terça"/> 
     <ComboBoxItem x:Name="_quarta" Content="Quarta"/> 
     <ComboBoxItem x:Name="_quinta" Content="Quinta"/> 
     <ComboBoxItem x:Name="_sexta" Content="Sexta"/> 
     <ComboBoxItem x:Name="_sabado" Content="Sábado"/> 
     <ComboBoxItem x:Name="_segundaQuarta" Content="Segunda e Quarta" Visibility="Collapsed"/> 
     <ComboBoxItem x:Name="_terçaQuinta" Content="Terça e Quinta" Visibility="Collapsed"/> 

    </ComboBox> 
+0

は同様にあなたのXAMLを投稿してください。 – sthotakura

+0

@sthotakuraあります。 – Pelicer

+0

通常、データバインディングとMVVMを使用して、コードとUI間の結合が少なくて済み、コードを簡単に保守する必要があります。 – Phil1970

答えて

3

バインディングは使用していますか?あなたは本当にそれを調べる必要があります、それはWPFの基礎です。この場合、単純に2つの可視性プロパティを使用することができます(単純に_numClass.Valueにバインドし、値に基づいて正しい可視性を返したカスタムValueConverterを作成するなど、もっと複雑な作業を行うこともできます)。

<ComboBox x:Name="cbxDate" HorizontalAlignment="Left" VerticalAlignment="Top" Width="214" Margin="526,200,0,0" SelectionChanged="cbxDate_SelectionChanged"> 
    <ComboBoxItem Content="Segunda" Visibility="{Binding Class1Visiblity}"/> 
    <ComboBoxItem Content="Terça" Visibility="{Binding Class1Visiblity}"/> 
    <ComboBoxItem Content="Quarta" Visibility="{Binding Class1Visiblity}"/> 
    <ComboBoxItem Content="Quinta" Visibility="{Binding Class1Visiblity}"/> 
    <ComboBoxItem Content="Sexta" Visibility="{Binding Class1Visiblity}"/> 
    <ComboBoxItem Content="Sábado" Visibility="{Binding Class1Visiblity}"/> 
    <ComboBoxItem Content="Segunda e Quarta" Visibility="{Binding Class2Visiblity}"/> 
    <ComboBoxItem Content="Terça e Quinta" Visibility="{Binding Class2Visiblity}"/> 
</ComboBox> 

そして、あなたのコードでは、INotifyPropertyChangedのといくつかのプロパティを追加します。

private Visibility class1Visibilty = Visibility.Visible; 
public Visibility Class1Visiblity 
{ 
    get 
    { 
     return class1Visibilty; 
    } 
    set 
    { 
     class1Visibility = value; 
     OnNotifyPropertyChanged("Class1Visibility"); 
    } 
} 

private Visibility class2Visibilty = Visibility.Collapsed; 
public Visibility Class2Visiblity 
{ 
    get 
    { 
     return class2Visibilty; 
    } 
    set 
    { 
     class2Visibility = value; 
     OnNotifyPropertyChanged("Class2Visibility"); 
    } 
} 

private void _numClass_LostFocus(object sender, RoutedEventArgs e) 
{   

    if (_numClass.Value >= 2) 
    { 
     Class1Visiblity = Visibility.Collapsed; 
     Class2Visiblity = Visibility.Visible; 
    } 
    else 
    { 
     Class1Visiblity = Visibility.Visible; 
     Class2Visiblity = Visibility.Collapsed; 
    } 
} 

あなたはDataContextのような特性を含むクラスを設定する必要があります。これは通常、ViewModelの一部として実行されます(関連付けられたView内のXAMLを使用)。

前述したように、データバインディングはWPFのコアコンセプトであり、実際にはできるだけ多く使用する必要があります。いくつかのチュートリアルを見てみましょう:

http://www.wpf-tutorial.com/data-binding/introduction/

https://msdn.microsoft.com/en-us/library/ms750612(v=vs.110).aspx

関連する問題