Hallo,
ich arbeite gerade an einem Baum in WPF. Im Grunde bin ich schon soweit fertig, ich habe nur noch ein kleines Problem.
Im Hintergrund pflege ich ein Objekt, welches den Baum beinhaltet. Dargestellt wird dieser eine Baum aber auf zwei Oberflächen.
Nun kann es sein, dass auf der einen Oberfläche eine Option gesetzt wird, welche ein paar TreeViewItems "ausblendet".
Mein Problem ist nun, dass sich der Baum dadurch auf beiden Oberflächen verändert. Dies wollte ich nun durch MultiBinding und einen Converter verhindern.
Mein Code sieht folgendermaßen aus:
Hier das nötige XAML:
Ich überprüfe praktisch ob eine CheckBox gesetzt ist, falls dies der Fall ist (Oberfläche 1) wird immer visible zurückgegeben. Falls die CheckBox nicht gesetzt ist (Oberfläche 2), wird anhand der Id, welche an das TreeViewItem gebunden ist das Objekt aus dem Baum geholt und die Tatsächliche Eigenschaft des Objekts zurückgegeben. Sprich meistens Visibilty.Collapsed.
Seitdem ich den Converter verwende werden die TreeViewItems aber gar nicht mehr ausgeblendet. Egal ob in dem Beispiel value(0) true oder false ist.
Bevor ich diesen Converter verwendet habe, habe ich es ganz schlich per Binding gelöst, wie in der auskommentieren Zeile zusehen ist. Aber dann ändern sich wie gesagt beide Oberflächen, was eigentlich nicht so sein soll.
ich arbeite gerade an einem Baum in WPF. Im Grunde bin ich schon soweit fertig, ich habe nur noch ein kleines Problem.
Im Hintergrund pflege ich ein Objekt, welches den Baum beinhaltet. Dargestellt wird dieser eine Baum aber auf zwei Oberflächen.
Nun kann es sein, dass auf der einen Oberfläche eine Option gesetzt wird, welche ein paar TreeViewItems "ausblendet".
Mein Problem ist nun, dass sich der Baum dadurch auf beiden Oberflächen verändert. Dies wollte ich nun durch MultiBinding und einen Converter verhindern.
Mein Code sieht folgendermaßen aus:
VB.NET-Quellcode
- Public Class ShowSegmentConverter
- Implements IMultiValueConverter
- Public Function Convert(value() As Object, targetType As Type, parameter As Object, culture As System.Globalization.CultureInfo) As Object Implements IMultiValueConverter.Convert
- If CBool(value(0)) Then
- Return System.Windows.Visibility.Visible
- Else
- Dim s As Segment = GlobSegmentTree.GetSegment(CLng(value(1)))
- Return s.Enabled
- End If
- End Function
- Public Function ConvertBack(value As Object, targetTypes() As Type, parameter As Object, culture As System.Globalization.CultureInfo) As Object() Implements IMultiValueConverter.ConvertBack
- Throw New NotSupportedException("This method should never be called")
- End Function
- End Class
Hier das nötige XAML:
XML-Quellcode
- <TreeView.ItemContainerStyle>
- <Style TargetType="{x:Type TreeViewItem}">
- <Setter Property="IsExpanded" Value="{Binding IsExpanded}"/>
- <!--<Setter Property="Visibility" Value="{Binding Enabled}"/>-->
- <Setter Property="Visibility">
- <Setter.Value>
- <MultiBinding Converter="{StaticResource ShowSegmentConverter}" Mode="OneWay">
- <Binding ElementName="IsAssignCheckBox" Path="IsChecked"/>
- <Binding Path="Id"/>
- </MultiBinding>
- </Setter.Value>
- </Setter>
- <Setter Property="Background" Value="Transparent"/>
Ich überprüfe praktisch ob eine CheckBox gesetzt ist, falls dies der Fall ist (Oberfläche 1) wird immer visible zurückgegeben. Falls die CheckBox nicht gesetzt ist (Oberfläche 2), wird anhand der Id, welche an das TreeViewItem gebunden ist das Objekt aus dem Baum geholt und die Tatsächliche Eigenschaft des Objekts zurückgegeben. Sprich meistens Visibilty.Collapsed.
Seitdem ich den Converter verwende werden die TreeViewItems aber gar nicht mehr ausgeblendet. Egal ob in dem Beispiel value(0) true oder false ist.
Bevor ich diesen Converter verwendet habe, habe ich es ganz schlich per Binding gelöst, wie in der auskommentieren Zeile zusehen ist. Aber dann ändern sich wie gesagt beide Oberflächen, was eigentlich nicht so sein soll.