Question

I have the following style defined for a TreeViewItem:

   <Style x:Key="{x:Type TreeViewItem}" TargetType="{x:Type TreeViewItem}">
                                                    <Setter Property="IsSelected" Value="{Binding Path=IsSelected, Mode=TwoWay}" />
                                                    <Setter Property="IsExpanded" Value="{Binding Path=IsExpanded, Mode=TwoWay}" />
                                                    <Setter Property="AllowDrop" Value="True" />                                                    
                                                    <Setter Property="Background" Value="Transparent"/>
                                                    <Setter Property="HorizontalContentAlignment" Value="{Binding Path=HorizontalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"/>
                                                    <Setter Property="VerticalContentAlignment" Value="{Binding Path=VerticalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"/>
                                                    <Setter Property="Padding"  Value="1,0,0,0"/>
                                                    <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
                                                    <Setter Property="FocusVisualStyle"  Value="{StaticResource TreeViewItemFocusVisual}"/>
                                                    <Setter Property="Template">
                                                        <Setter.Value>
                                                            <ControlTemplate TargetType="{x:Type TreeViewItem}">
                                                                <Grid>
                                                                    <Grid.ColumnDefinitions>
                                                                        <ColumnDefinition MinWidth="19" Width="Auto"/>
                                                                        <ColumnDefinition Width="Auto"/>
                                                                        <ColumnDefinition Width="*"/>
                                                                    </Grid.ColumnDefinitions>
                                                                    <Grid.RowDefinitions>
                                                                        <RowDefinition Height="Auto"/>
                                                                        <RowDefinition/>
                                                                    </Grid.RowDefinitions>

                                                                    <!-- Connecting Lines -->
                                                                    <Rectangle x:Name="HorLn" Height="1" Stroke="#8888"  Margin="10,0,0,0" SnapsToDevicePixels="true"/>
                                                                    <Rectangle x:Name="VerLn" Width="1" Stroke="#8888" Grid.RowSpan="2" SnapsToDevicePixels="true"/>
                                                                    <ToggleButton x:Name="Expander"
                                                                                  Style="{StaticResource ExpandCollapseToggleStyle}"
                                                                                  IsChecked="{Binding Path=IsExpanded, RelativeSource={RelativeSource TemplatedParent}}"
                                                                                  ClickMode="Press"/>
                                                                    <Border Name="Bd"
                                                                            Grid.Column="1"
                                                                            Background="{TemplateBinding Background}"
                                                                            BorderBrush="{TemplateBinding BorderBrush}"
                                                                            BorderThickness="{TemplateBinding BorderThickness}"
                                                                            Padding="{TemplateBinding Padding}">
                                                                        <ContentPresenter x:Name="PART_Header"
                                                                                  ContentSource="Header"
                                                                                  HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"/>
                                                                    </Border>
                                                                    <ItemsPresenter x:Name="ItemsHost"
                                                                            Grid.Row="1"
                                                                            Grid.Column="1"
                                                                            Grid.ColumnSpan="2"/>
                                                                </Grid>
                                                                <ControlTemplate.Triggers>

                                                                    <!-- This trigger changes the connecting lines if the item is the last in the list -->
                                                                    <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Converter={StaticResource LineConverter}}" Value="true">
                                                                        <Setter TargetName="VerLn"
                                                                        Property="Height"
                                                                        Value="6"/>
                                                                        <Setter TargetName="VerLn"
                                                                        Property="VerticalAlignment"
                                                                        Value="Top"/>
                                                                    </DataTrigger>
                                                                    <Trigger Property="IsExpanded"
                                                                     Value="false">
                                                                        <Setter TargetName="ItemsHost"
                                                                        Property="Visibility"
                                                                        Value="Collapsed"/>
                                                                    </Trigger>
                                                                    <Trigger Property="HasItems"
                                                                     Value="false">
                                                                        <Setter TargetName="Expander"
                                                                        Property="Visibility"
                                                                        Value="Hidden"/>
                                                                    </Trigger>
                                                                    <MultiTrigger>
                                                                        <MultiTrigger.Conditions>
                                                                            <Condition Property="HasHeader"
                                                                               Value="false"/>
                                                                            <Condition Property="Width"
                                                                               Value="Auto"/>
                                                                        </MultiTrigger.Conditions>
                                                                        <Setter TargetName="PART_Header"
                                                                        Property="MinWidth"
                                                                        Value="75"/>
                                                                    </MultiTrigger>
                                                                    <MultiTrigger>
                                                                        <MultiTrigger.Conditions>
                                                                            <Condition Property="HasHeader"
                                                                               Value="false"/>
                                                                            <Condition Property="Height"
                                                                               Value="Auto"/>
                                                                        </MultiTrigger.Conditions>
                                                                        <Setter TargetName="PART_Header"
                                                                        Property="MinHeight"
                                                                        Value="19"/>
                                                                    </MultiTrigger>
                                                                    <Trigger Property="IsSelected"
                                                                     Value="true">
                                                                        <Setter TargetName="Bd"
                                                                        Property="Background"
                                                                        Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
                                                                        <Setter Property="Foreground"
                                                                        Value="{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}"/>
                                                                    </Trigger>
                                                                    <MultiTrigger>
                                                                        <MultiTrigger.Conditions>
                                                                            <Condition Property="IsSelected"
                                                                               Value="true"/>
                                                                            <Condition Property="IsSelectionActive"
                                                                               Value="false"/>
                                                                        </MultiTrigger.Conditions>
                                                                        <Setter TargetName="Bd"
                                                                        Property="Background"
                                                                        Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/>
                                                                        <Setter Property="Foreground"
                                                                        Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
                                                                    </MultiTrigger>
                                                                    <Trigger Property="IsEnabled"
                                                                     Value="false">
                                                                        <Setter Property="Foreground"
                                                                        Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
                                                                    </Trigger>
                                                                </ControlTemplate.Triggers>
                                                            </ControlTemplate>
                                                        </Setter.Value>
                                                    </Setter>
                                                </Style>

I cannot get TreeViewItem to expand, when IsExpanded property of the model is set to true in code behind. However, model IsExpanded property changes when TreeViewItem is expanded from user interface. What am I missing?

Thanks.

Was it helpful?

Solution

I have similar code working, the setting you have above looks fine.

    <Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" />

Did you raise a PropertyChanged event once you updated the IsExpanded property in your model?

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top