18 votos

¿Cómo seleccionar mediante programación un elemento en un TreeView de WPF?

¿Cómo es posible seleccionar mediante programación un elemento en un WPF TreeView ? El ItemsControl modelo parece impedirlo.

17voto

kuninl Puntos 181

Para aquellos que todavía están buscando la solución adecuada a este problema aquí es la siguiente. Creo que este es uno de los comentarios al Proyecto de Código artículo "WPF TreeView Selección" http://www.codeproject.com/KB/WPF/TreeView_SelectionWPF.aspx por DaWanderer. Fue publicado por Kenrae en Noviembre 25 de 2008. Esto funcionó muy bien para mí. Gracias Kenrae!

Aquí está su post:

En lugar de caminar por el árbol, tener su propio objeto de datos tienen la propiedad IsSelected (y recomiendo la propiedad IsExpanded demasiado). Definir un estilo para la TreeViewItems del árbol usando el ItemContainerStyle de la propiedad en la vista en árbol, que se une a las propiedades de la TreeViewItem a los objetos de datos. Algo como esto:

<Style x:Key="LibraryTreeViewItemStyle"
               TargetType="{x:Type TreeViewItem}">
            <Setter Property="IsExpanded"
                        Value="{Binding IsExpanded, Mode=TwoWay}" />
            <Setter Property="IsSelected"
                        Value="{Binding IsSelected, Mode=TwoWay}" />
            <Setter Property="FontWeight"
                        Value="Normal" />
            <Style.Triggers>
                  <Trigger Property="IsSelected"
                              Value="True">
                        <Setter Property="FontWeight"
                                    Value="Bold" />
                  </Trigger>
            </Style.Triggers>
      </Style>

<TreeView ItemsSource="{Binding Path=YourCollection}"
               ItemContainerStyle="{StaticResource TreeViewItemStyle}"
               ItemTemplate={StaticResource YourHierarchicalDataTemplate}/>

12voto

Steven Robbins Puntos 18791

Es un dolor real por alguna extraña razón, usted tiene que utilizar ContainerFromItem para obtener el contenedor, y luego invocar al método select. Hay una entrada de blog sobre cómo hacerlo aquí.

7voto

Kent Boogaart Puntos 97432

Que necesita para obtener la TreeViewItem y luego IsSelected a true .

5voto

akjoshi Puntos 6711

Esto no es tan simple como parece, el enlace proporcionado por Steven tiene una solución, publicado en 2008, que aún funciona, pero no se encarga de Virtualizado TreeViews. Además de muchos otros problemas que se mencionan en los comentarios de ese artículo. No hay delitos, pero también estoy atascado con el mismo problema y no puede encontrar una solución perfecta. Aquí están los enlaces a algunos de los artículos/posts que me ayudó mucho-

¿Cómo puedo ampliar los elementos en una vista en árbol? – Parte III: http://bea.stollnitz.com/blog/?p=59

Mediante programación la Selección de un Elemento en una vista en árbol: http://blog.quantumbitdesigns.com/2008/07/22/programmatically-selecting-an-item-in-a-treeview/#respond

TreeView, TreeViewItem y IsSelected: http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/7e368b93-f509-4cd6-88e7-561e8d3246ae/

1voto

Prueba con esto

    /// <summary>
    /// Selects the tree view item.
    /// </summary>
    /// <param name="Collection">The collection.</param>
    /// <param name="Value">The value.</param>
    /// <returns></returns>
    private TreeViewItem SelectTreeViewItem(ItemCollection Collection, String Value)
    {
        if (Collection == null) return null;
        foreach(TreeViewItem Item in Collection)
        {
            /// Find in current
            if (Item.Header.Equals(Value))
            {
                Item.IsSelected = true;
                return Item;
            }
            /// Find in Childs
            if (Item.Items != null)
            {
                TreeViewItem childItem = this.SelectTreeViewItem(Item.Items, Value);
                if (childItem != null)
                {
                    Item.IsExpanded = true;
                    return childItem;
                }
            }
        }
        return null;
    }

Referencia: http://amastaneh.blogspot.com/2011/06/wpf-selectedvalue-for-treeview.html

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X