2010-10-21 13 views
5

Sto usando TreeView per visualizzare i miei dati nell'interfaccia utente. Ora la mia applicazione si aggiorna ogni 5 secondi in modo che mostri i dati più recenti. C'è un modo in cui posso salvare il mio stato espanso o lo stato di visualizzazione ad albero crollato anche dopo il caricamento della finestra? Perché se ho una grande quantità di dati e ho bisogno di più di 5 secondi per andare ai dati desiderati, TreeView crolla solo dopo ogni 5 secondi con l'aggiornamento della finestra, e devo ricominciare da capo.Salvare lo stato WPF TreeView sui dati di ricarica

 <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

State ricreando la collezione Sezioni ogni 5 secondi? – Rachel

+0

sì..la finestra si ricarica/si aggiorna ogni 5 secondi. Quindi l'ho come una raccolta di osservazioni che viene cancellata e quindi riempita di oggetti .. – developer

+0

Oh bene, allora la proprietà IsExpanded viene cancellata ogni 5 secondi. Qualche possibilità di aggiornare i valori invece di eliminarli e ricrearli? – Rachel

risposta

13

ho risolto il problema con l'aggiunta di IsExpanded e IsSelected proprietà all'oggetto che la mia TreeView era destinata a

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

Cosa devo scrivere nel codice? – developer

+0

Inoltre, come imposto il valore di IsExpanded per ciascun nodo. – developer

+2

Dipende da ciò a cui TreeView è vincolante. Se si tratta di un elenco di oggetti personalizzati, è semplice, basta aggiungere due proprietà booleane pubbliche denominate IsExpanded e IsSelected. Per impostarli non è necessario fare nulla. Fanno il default su False e si aggiornano quando l'utente espande/comprime/seleziona gli elementi della vista d'albero poiché usa il binding TwoWay – Rachel

Problemi correlati