ObservableCollection pas la mise à jour de la Vue

Je commence tout juste avec MVVM et ont frappé un obstacle que j'espère que quelqu'un peut m'aider avec. Je suis en train de créer une Vue simple avec 2 zones de liste. Une sélection à partir de la première zone de liste s'affichent la deuxième zone de liste. J'ai une classe créée qui stocke les informations que je souhaite lier à.

MyObject Classe (Objet observé est juste une classe qui implémente INotifyPopertyChanged)

public class MyObject : ObservableObject
{
    String _name = String.Empty;
    ObservableCollection<MyObject> _subcategories;

    public ObservableCollection<MyObject> SubCategories
    {
        get { return _subcategories; }

        set
        {
            _subcategories = value;
            RaisePropertyChanged("SubCategories");
        }
    }

    public String Name
    {
        get { return _name; }
        set
        {
            _name = value;
            RaisePropertyChanged("Name");
        }
    }


    public MyObject()
    {
        _subcategories = new ObservableCollection<EMSMenuItem>();
    }
}

Dans mon viewmodel j'ai deux ObservableCollections créé

public ObservableCollection<EMSMenuItem> Level1MenuItems { get; set; }
public ObservableCollection<EMSMenuItem> Level2MenuItems { get; set; }

Dans mon constructeur du ViewModel j'ai:

this.Level1MenuItems = new ObservableCollection<EMSMenuItem>();
this.Level2MenuItems = new ObservableCollection<EMSMenuItem>();
this.Level1MenuItems = LoadEMSMenuItems("Sample.Xml");

Qui fonctionne très bien pour le Niveau 1 articles et ils afficher correctement dans la Vue. Toutefois, j'ai une commande qui est appelé lorsque l'utilisateur clique sur un élément dans la zone de liste, qui est la suivante:

Level2MenuItems = ClickedItem.SubCategories;

Pour une raison quelconque, cela ne met pas à jour l'INTERFACE utilisateur de la deuxième zone de liste. Si j'ai mis un point d'arrêt à cet endroit, je peux voir que Level2MenuItems a la bonne information qui y est stockée. Si j'écris une boucle foreach et les ajouter individuellement à la Level2MenuItems collection alors il ne s'affiche pas correctement.

Aussi comme un test, j'ai ajouté ce qui suit à l'constructeur:

Level2MenuItems = Level1MenuItems[0].SubCategories;

Et que, mis à jour correctement.

Alors pourquoi le code fonctionne comme prévu dans le constructeur, ou si la boucle à travers, mais pas lorsqu'un utilisateur clique sur un item de la listbox?

OriginalL'auteur David Duncan | 2011-12-18