2016-07-18 28 views
0

Ich habe ein Strukturansichts-Steuerelement mit hierarchischen Daten. Es verfügt über ein Kontextmenü mit vier Optionen: Erweitern, Alle erweitern, Reduzieren, Alle reduzieren. Ich bin derzeit die folgende Klasse zu zeigen,/die Kontextmenüpunkte verbergen:Sichtbarkeit von Kontextmenüeinträgen in WPF abhängig von anderen Menüoptionen festlegen

Public Class clsTreeContextMenuVisibilityConverter 
Implements IValueConverter 

Public Function Convert(InValue As Object, InTargetType As Type, InParameter As Object, InCulture As Globalization.CultureInfo) As Object Implements IValueConverter.Convert 


    Dim node As TreeNode = Nothing 

    If InValue Is Nothing Then 
     Return Binding.DoNothing 
    End If 

    node = DirectCast(InValue, TreeNode) 

    If InValue.[GetType]() <> GetType([Boolean]) Then 
     If node.HasChildren AndAlso node.ParentNode Is Nothing Then 
      If node.IsExpanded Then 
       Return Visibility.Collapsed 
      End If    
      Return Visibility.Visible 
     End If 
    End If 

    Return Binding.DoNothing 

End Function 

Public Function ConvertBack(InValue As Object, InTargetType As Type, InParameter As Object, InCulture As Globalization.CultureInfo) As Object Implements IValueConverter.ConvertBack 
    Throw New NotImplementedException() 
End Function 

End Class

XAML:

<Style x:Key="ExpandMenuItemStyle" 
    TargetType="MenuItem"> 
    <Setter Property="FontWeight" Value="Bold" /> 
    <Setter Property="Visibility" Value="{Binding Converter={StaticResource VisConverter}}" /> 
</Style> 

<MenuItem Header="Expand" Style="{StaticResource ExpandMenuItemStyle}" /> 

VisConverter ist x: Key des Wandlers Klasse. Meine Frage ist, wenn ein Node erweitert wird, sollte ich Collapse sehen und umgekehrt. Wenn es sich um einen Stammelternknoten handelt, sollte ich auch Expand All sehen. Muss ich also für alle vier Fälle separate Konverter schreiben oder gibt es dafür einen intelligenten Weg?

Bitte lassen Sie mich wissen, wenn weitere Informationen benötigt werden.

Antwort

1

Sie möchten wahrscheinlich zwei Konverter oder zwei Paare von Konvertern. Eine für den erweiterten Zustand und eine für die Rückgabe, ob der Knoten ein Eltern- oder Kindknoten ist. Wenn Sie nur zwei Konverter verwenden, benötigen Sie einen Parameter, um zu bestimmen, ob der Konverter Visibility.Visible oder Visibility.Collapsed zurückgeben soll.

Mit vier Konvertern brauchen Sie den Parameter nicht.

+0

Ich habe nicht genau zwei Konverter verwendet, aber Ihre Antwort gab mir eine Idee, den Menüpunkt als ConverterParameter zu übergeben, dann konnte ich alle vier Fälle in nur einer Konverterklasse behandeln. – Veda