WPF TreeView destinata a ObservableCollection non aggiornare nodi principali
-
22-09-2019 - |
Domanda
Siamo spiacenti - la mia domanda è quasi identica a questo ma dal momento che non ha ricevuto una risposta valida, spero che qualcun altro ha alcune idee nuove.
Ho un TreeView WPF che è destinata a una gerarchia di un solo tipo:
public class Entity
{
public string Title { get; set; }
public ObservableCollection<Entity> Children { get; set; }
}
La classe Entity implementa INotifyPropertyChanged, ma ho omesso questo codice per chiarezza.
La TreeView è associato a un ObservableCollection
<TreeView ItemsSource="{Binding Path=Entities}">
<TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type local:Entity}" ItemsSource="{Binding Path=Children}">
<TextBlock Text="{Binding Path=Title}" />
</HierarchicalDataTemplate>
</TreeView.Resources>
</TreeView>
Inizialmente il TreeView si lega come previsto e visualizza una gerarchia multi-livello in modo corretto. Inoltre, quando l'appartenenza a una delle collezioni per bambini è a livello di codice modificato, le modifiche vengono correttamente nel controllo TreeView.
Tuttavia, variazione dei membri del ObservableCollection livello membro principale
Tutti i suggerimenti sarebbero apprezzati.
Grazie, Tim
Soluzione
La mia ipotesi iniziale è che si ha qualcosa di simile al seguente per il nodo radice:
public ObservableCollection<Entity> Entities
{
get;
set;
}
Poi, invece di fare qualcosa di [buon] come il seguente:
Entities.Clear();
foreach (var item in someSetOfItems)
Entities.Add(item);
Si sta facendo qualcosa di [male] in questo modo:
Entities = new ObservableCollection<Entity>(someSetOfItems);
Si dovrebbe essere in grado di rintracciare il problema rendendo il campo sostegno del readonly
Entità immobile:
private readonly ObservableCollection<Entity> _entities
= new ObservableCollection<Entity>();
public ObservableCollection<Entity> Entities
{
get
{
return _entities;
}
}
Altri suggerimenti
Ulteriori spiegazioni, molto tempo per la risposta a venire, ma credo che se si fa il legame in XAML, e poi nel codice assegnare un nuovo oggetto per la proprietà si rompe il legame, in modo che avrebbe dovuto rifare l'associazione in il codice per farlo funzionare. Quindi la soluzione con il campo di supporto di sola lettura. Se facendo così non sarà in grado di assegnare un nuovo ObservableCollection e non si romperà il legame assegnando un nuovo oggetto al campo supporto.