Persistente IsExpanded en ItemTemplate

Actualmente estoy usando WPF y enlaces de datos para mostrar/actualizar datos. Tengo un TreeView y un ItemTemplate.

<TreeView ItemsSource="{StaticResource Labels}">
    <TreeView.ItemTemplate>
        <DataTemplate>
            <Grid>
                <TreeViewItem Header="{Binding Key}">
                    <TextBlock Text="{Binding Value}" />
                </TreeViewItem>
            </Grid>
        </DataTemplate>
    </TreeView.ItemTemplate>
</TreeView>

"Labels" es un diccionario que asigné antes de "InitializeComponent". El problema es que cada vez que cambio los datos y llamo a "Actualizar" en TreeView, todos los elementos de la vista de árbol vuelven a un estado colapsado incluso si se expandieron.

¿Cómo mantengo los elementos expandidos en su estado expandido?

EDITAR: Para otros que intentan hacer esto, solo voy a poner el XAML que funcionó para mí (ya que tuve dificultades para encontrarlo cuando estaba buscando en línea). Hice una clase de ayuda que mantuvo IsExpanded como parte de la fuente de datos.

<TreeView ItemsSource="{StaticResource Labels}">
    <TreeView.ItemTemplate>
        <DataTemplate>
            <Grid>
                <TreeViewItem Header="{Binding Key}"
                              IsExpanded="{Binding Path=Value.IsExpanded, Mode=TwoWay}">
                    <TextBlock Text="{Binding Value.RealValue}" />
                </TreeViewItem>
            </Grid>
        </DataTemplate>
    </TreeView.ItemTemplate>
</TreeView>

preguntado el 01 de julio de 12 a las 21:07

2 Respuestas

Puede crear una clase contenedora llamada 'Expandible' que envuelve su valor y expone una propiedad IsExpanded. A continuación, vincule el valor IsExpanded de TreeViewItems a la propiedad IsExpanded de Expandable en modo de vinculación bidireccional para almacenar el estado. Esto debería resolver tu problema.

Respondido 02 Jul 12, 00:07

Puede lograrlo creando un estilo para TreeViewItem y configurando el modo de enlace en dos vías.

Respondido 01 Jul 12, 22:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.