WPF TreeView obligado a ObservableCollection no actualizar nodos raíz
-
22-09-2019 - |
Pregunta
Lo sentimos - mi pregunta es casi idéntico al pero éste ya que no recibió una respuesta viable, estoy esperando que alguien tiene algunas ideas frescas.
Tengo un TreeView WPF que está enlazado a una jerarquía de un solo tipo:
public class Entity
{
public string Title { get; set; }
public ObservableCollection<Entity> Children { get; set; }
}
Los implementa la clase de entidad INotifyPropertyChanged, pero me han omitido este código para mayor claridad.
El TreeView se une 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>
muestra inicialmente se une el TreeView como se esperaba y correctamente una jerarquía de niveles múltiples. Además, cuando los miembros de una de las colecciones infantiles se modifica mediante programación, los cambios se reflejan correctamente en el TreeView.
Sin embargo, los cambios en la composición de la ObservableCollection nivel de miembro raíz
sería apreciada cualquier sugerencia.
Gracias, Tim
Solución
Mi conjetura inicial es que tiene algo así como lo siguiente para el nodo raíz:
public ObservableCollection<Entity> Entities
{
get;
set;
}
Entonces, en vez de hacer algo [buena] como la siguiente:
Entities.Clear();
foreach (var item in someSetOfItems)
Entities.Add(item);
Usted está haciendo algo [malo] como esto:
Entities = new ObservableCollection<Entity>(someSetOfItems);
debe ser capaz de localizar el problema, haciendo que el campo respaldo del readonly
Entidades propiedad:
private readonly ObservableCollection<Entity> _entities
= new ObservableCollection<Entity>();
public ObservableCollection<Entity> Entities
{
get
{
return _entities;
}
}
Otros consejos
Una explicación más amplia, mucho tiempo para la respuesta a venir, pero yo creo que si lo hace la unión en XAML y, a continuación, en el código de asignar un nuevo objeto a la propiedad que romper la unión, por lo que tendría que volver a hacer la unión en código para que funcione. Por lo tanto la solución con el campo de respaldo de sólo lectura. Si haciendo de esa manera usted no será capaz de asignar un nuevo ObservableCollection y no romper la unión mediante la asignación de un nuevo objeto al campo respaldo.