2010-10-21 6 views
5

J'utilise TreeView pour afficher mes données dans l'interface utilisateur. Maintenant, mon application est actualisée toutes les 5 secondes afin qu'elle affiche les données les plus récentes. Existe-t-il un moyen de sauvegarder mon état étendu ou mon état replié de treeview même après le rechargement de la fenêtre? Parce que si j'ai une énorme quantité de données et que je prends plus de 5 secondes pour aller aux données désirées, le TreeView s'effondre juste après toutes les 5 secondes avec l'actualisation de la fenêtre, et je dois recommencer à zéro.Enregistrer l'état WPF TreeView sur le rechargement de données

 <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

Vous recréez la collection Les articles toutes les 5 secondes? – Rachel

+0

oui ... la fenêtre recharge/rafraîchit toutes les 5 secondes. Je l'ai donc comme un observablecollection qui est effacé, puis rempli avec des objets .. – developer

+0

Eh bien, votre propriété IsExpanded est également effacée toutes les 5 secondes. Y a-t-il une chance que vous puissiez simplement mettre à jour les valeurs au lieu de les supprimer et de les recréer? – Rachel

Répondre

13

Je résolu ce problème en ajoutant des propriétés IsExpanded et isSelected à l'objet que mon TreeView était lié à

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

Qu'est-ce que j'écris dans le code derrière? – developer

+0

En outre, comment vais-je définir la valeur de IsExpanded pour chaque nœud? – developer

+2

Cela dépend de ce à quoi est lié votre TreeView. Si c'est une liste d'objets personnalisés, alors c'est facile, ajoutez simplement deux propriétés booléennes publiques appelées IsExpanded et IsSelected. Pour les définir, vous n'avez rien à faire. Ils seront par défaut à False et seront mis à jour lorsque l'utilisateur étend/collaps/sélectionne les éléments treeview puisqu'il utilise la liaison TwoWay – Rachel