2010-10-21 9 views
5

Estoy usando TreeView para mostrar mis datos en la interfaz de usuario. Ahora mi aplicación se actualiza cada 5 segundos para que muestre la información más reciente. ¿Hay alguna forma de que pueda guardar mi estado expandido o el estado contraído de la vista en árbol incluso después de volver a cargar la ventana? Porque si tengo una gran cantidad de datos y tardo más de 5 segundos en ir a los datos deseados, el TreeView simplemente colapsa después de cada 5 segundos con la ventana de actualización, y tengo que empezar desde cero.Guardar estado WPF TreeView en la recarga de datos

 <TreeView ItemsSource="{Binding Sections}" Grid.Row="1" 
      ItemTemplate="{StaticResource sectionTemplate}" > 

     <TreeView.Resources> 
      <Style TargetType="TreeViewItem"> 
      <Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" /> 
      </Style> 
     </TreeView.Resources> 

    </TreeView> 

public ObservableCollection<MyViewModel> =new ObservableCollection<MyViewModel>(); 

public bool IsExpanded 
    { 
     get { return (bool)GetValue(IsExpandedProperty); } 
     set { SetValue(IsExpandedProperty, value); } 
    } 
    public static readonly DependencyProperty IsExpandedProperty = DependencyProperty.Register("IsExpanded", typeof(bool), typeof(MyViewModel)); 


if (result.TotalResults > 0) 
     { 
     foreach (DomainObject obj in result.ResultSet) 
     { 
      AT myAT= (AT)obj; 
      arrdep.Add(myAT); 
     } 
     } 
+0

¿Está volviendo a crear la colección Secciones cada 5 segundos? – Rachel

+0

sí ... la ventana se recarga/actualiza cada 5 segundos. Así que lo tengo como una colección observable que se borra y luego se llena con objetos. – developer

+0

Ah, entonces su propiedad IsExpanded también se está limpiando cada 5 segundos. ¿Hay alguna posibilidad de que simplemente actualice los valores en lugar de eliminarlos y volver a crearlos? – Rachel

Respuesta

13

que se resolvió el problema mediante la adición IsExpanded y IsSelected propiedades al objeto de que mi TreeView estaba obligado a

<Style TargetType="{x:Type TreeViewItem}"> 
    <Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" /> 
    <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" /> 
</Style> 
+0

¿Qué escribo en el código? – developer

+0

Además, ¿cómo estableceré el valor de IsExpanded para cada nodo? – developer

+2

Depende de a qué se vincula su TreeView. Si se trata de una lista de objetos personalizados, es fácil, simplemente agregue dos propiedades booleanas públicas llamadas IsExpanded e IsSelected. Para configurarlos no necesitas hacer nada. Cambiarán a False por defecto y se actualizarán cuando el usuario expanda/contraiga/seleccione los elementos de la vista de árbol ya que usa el enlace TwoWay – Rachel