<Window x:Class="WpfApplication1.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:WpfApplication1" Title="Binding to a Collection" SizeToContent="WidthAndHeight"> <Window.Resources> <local:People x:Key="MyFriends"/> <DataTemplate x:Key="DetailTemplate"> <StackPanel> <TextBlock Text="First Name:"/> <TextBlock Text="{Binding Path=FirstName}"/> <TextBlock Text="Last Name:"/> <TextBlock Text="{Binding Path=LastName}"/> </StackPanel> </DataTemplate> </Window.Resources> <StackPanel> <TextBlock>My Friends:</TextBlock> <ListBox Width="200" IsSynchronizedWithCurrentItem="True" ItemsSource="{Binding Source={StaticResource MyFriends}}"/> <TextBlock>Information:</TextBlock> <ContentControl Content="{Binding Source={StaticResource MyFriends}}" ContentTemplate="{StaticResource DetailTemplate}"/> </StackPanel> </Window> //File:Window.xaml.cs using System; using System.ComponentModel; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Data; using System.Windows.Media; using System.Collections.ObjectModel; using System.ComponentModel; namespace WpfApplication1 { public partial class Window1 : Window { public Window1() { InitializeComponent(); } } public class Person : INotifyPropertyChanged { private string firstname; private string lastname; public event PropertyChangedEventHandler PropertyChanged; public Person() { } public Person(string first, string last) { this.firstname = first; this.lastname = last; } public override string ToString() { return firstname.ToString(); } public string FirstName { get { return firstname; } set { firstname = value; OnPropertyChanged("FirstName"); } } public string LastName { get { return lastname; } set { lastname = value; OnPropertyChanged("LastName"); } } protected void OnPropertyChanged(string info) { PropertyChangedEventHandler handler = PropertyChanged; if (handler != null) { handler(this, new PropertyChangedEventArgs(info)); } } } public class People : ObservableCollection<Person> { public People(): base() { Add(new Person("A", "Q")); Add(new Person("B", "E")); Add(new Person("C", "E")); Add(new Person("D", "R")); } } }