Nous pouvons voir partout de nombreux exemples expliquant comment binder une liste d'éléments vers une interface xaml de notre application, voici en passant, un résumé reprennant les différentes étapes pour mettre en place ce genre de binding.

Que Binder ?

Techniquement, vous pouvez binder n'importe quelle type de liste, que ce soit une List<Generique>, un tableau, une ArrayList, tout passera, cependant, vous vous rendrez vitte compte que seul les ObservableCollection<> offrent un support pré-intégré pour l'update du binding lors de l'ajout ou du retrait d'un élément de la collection.

Donc, à mon avis, quitte à avoir parfois besoin d'ObservableCollection, hors mit autre contrainte, autant toujours les utiliser.

Ou binder ?

La class ItemsControl est la class de base des conteneur de list de n'importe d'item. De cette class dérive tout ce qui est Menu, ListBox, ComboBox, TreeView, ...
Tout ce qui est customisable sur un  ItemControl est donc aussi customisable sur un de ses dérivé.

Binder une liste se fait des deux coté de notre interface, premièrement dans les déclaration xaml, ensuite dans le code behind.

Prennon un exemple simple, une liste d'employés :

  1. Creation de notre class d'exemple
    [code:c#]
    class Employee
    {
        private string _nom;
        public string Nom
        {
            get { return _nom; }
            set { _nom = value; }
        }

        private string _prenom;
        public string Prenom
        {
            get { return _prenom; }
            set { _prenom = value; }
        }

        private int _age;
        public int Age
        {
            get { return _age; }
            set { _age = value; }
        }
    }
    [/code]
  2. Création de notre ObservableCollection dans le code behind de notre application
    [code:c#]
    public Window1()
    {
        InitializeComponent();
  3.     ObservableCollection<Employee> list = new ObservableCollection<Employee>()
        {
            new Employee() { Prenom = "Simon", Nom = "Boigelot", Age=22 },
            new Employee() { Prenom = "Loïc", Nom = "Bar", Age=19 },
            new Employee() { Prenom = "Thieu", Nom = "Lizin", Age=21 }
        };
    }
    [/code]