I am having a problem getting the TreeViewItem from a TreeView with HierarchicalDataTemplate. I want to search for an item by value and set IsExpanded to True, then select it.
I am using C# WPF with Visual Studio 2015 and Windows 10.
XAML Code :
<TreeView x:Name="TreeOres" SelectedItemChanged="TreeOres_SelectedItemChanged"  Background="#f9f9f9" MinWidth="350" Width="auto" DockPanel.Dock="Left" ItemsSource="{Binding}">
                <TreeView.ItemTemplate>
                    <HierarchicalDataTemplate DataType="local:Ores" ItemsSource="{Binding Path=resParent_Code_FK}">
                        <DockPanel LastChildFill="True" HorizontalAlignment="Stretch" Width="auto" Margin="0,5,0,5">
                            <Label Width="30" Height="30" DockPanel.Dock="Left" Uid="{Binding Path=Ores_ParentCode_FK}" Template="{StaticResource ImageTemp}"/>
                            <Label Content="{Binding Path=Ores_Name}" Width="250" DockPanel.Dock="Left"/>
                            <DockPanel.ContextMenu>
                                <ContextMenu>
                                    <MenuItem Header="اضافة مجلد جديد + " x:Name="AddGroup" Click="AddGroup_Click" Uid="{Binding Path=Ores_Code}" />
                                    <MenuItem Header="اضافة صنف جديد + " x:Name="AddItem" Click="AddItem_Click" Uid="{Binding Path=Ores_Code}" />
                                </ContextMenu>
                            </DockPanel.ContextMenu>
                        </DockPanel>
                    </HierarchicalDataTemplate>
                </TreeView.ItemTemplate>
                <TreeView.Resources>
                    <LinearGradientBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" EndPoint="0,1" StartPoint="0,0">
                        <GradientStop Color="#FFD9F4FF" Offset="0"/>
                        <GradientStop Color="#FF9BDDFB" Offset="1"/>
                    </LinearGradientBrush>
                    <LinearGradientBrush x:Key="{x:Static SystemColors.ControlBrushKey}" EndPoint="0,1" StartPoint="0,0">
                        <GradientStop Color="#FFEEEDED" Offset="0"/>
                        <GradientStop Color="#FFDDDDDD" Offset="1"/>
                    </LinearGradientBrush>
                    <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Black" />
                    <SolidColorBrush x:Key="{x:Static SystemColors.ControlTextBrushKey}" Color="Black" />
                    <Style TargetType="{x:Type TreeViewItem}">
                        <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" />
                        <Setter Property="IsExpanded" Value="True" />
                    </Style>
                </TreeView.Resources>
                <TreeView.ItemContainerStyle>
                    <Style TargetType="{x:Type TreeViewItem}">
                        <Setter Property="BorderThickness" Value="1.5"/>
                        <Style.Triggers>
                            <Trigger Property="IsSelected" Value="True">
                                <Setter Property="BorderBrush" Value="#adc6e5"/>
                            </Trigger>
                            <Trigger Property="IsSelected" Value="True">
                                <Setter Property="FontWeight" Value="Bold" />
                            </Trigger>
                            <MultiTrigger>
                                <MultiTrigger.Conditions>
                                    <Condition Property="IsSelected" Value="True"/>
                                    <Condition Property="IsSelectionActive" Value="False"/>
                                </MultiTrigger.Conditions>
                                <Setter Property="BorderBrush" Value="LightGray"/>
                            </MultiTrigger>
                        </Style.Triggers>
                        <Style.Resources>
                            <Style TargetType="Border">
                                <Setter Property="CornerRadius" Value="1"/>
                            </Style>
                        </Style.Resources>
                    </Style>
                </TreeView.ItemContainerStyle>
            </TreeView>
and C# code
class ClassTreeView
{
    /// <summary>
    /// Search in treeview by some value
    /// </summary>
    /// <param name="FilterColumn"></param>
    /// <param name="FilterString"></param>
    /// <param name="FilterColumnText"></param>
    /// /// <param name="Result"></param>
    /// 
    public string FilterString { get; set; }
    public string FilterColumn { get; set; }
    public string FilterColumnText { get; set; }
    public object Result { get; set; }
    public DataTable mtable { get; set; }
    public void SelectNodeById(TreeView Tree)
    {
        for (int i = 0; i < Tree.Items.Count; i++)
        {
            DataRowView row = Tree.Items[i] as DataRowView;
            if (SearchInItem(row))
            {
                Tree.ItemsSource = null;
                Tree.ItemsSource = mtable.DefaultView;
            }
        }
    }
    private bool SearchInItem(DataRowView item)
    {
        foreach (DataRowView obje in item.DataView)
        {
            if (SeaechNode(obje))
            {
                break;
            }
            SearchInItem(obje);
        }
        return false;
    }
    private bool SeaechNode(DataRowView row)
    {
        foreach (DataRowView dr in row.DataView)
        {
            dr.DataView.RowFilter = FilterColumn + "=" + FilterString;
            if(dr != null)
            {
                return true;
            }
        }
        return false;
    }
}