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 y cada instancia de la entidad expone un conjunto de instancias de entidad contenidos a través de su propiedad niños:

<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 no se reflejan en el TreeView.

sería apreciada cualquier sugerencia.

Gracias, Tim

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top