Привязка к списку вызывает утечку памяти

Когда я связываю ItemsSource объекта ListBox со списком, механизм привязки удерживает элементы списка после того, как элемент управления исчезнет. Это приводит к тому, что все элементы списка остаются в памяти. Проблема исчезает при использовании ObservalbleCollection. Почему это происходит?

XAML внутри тега окна

<Grid>
    <StackPanel>
        <ContentControl Name="ContentControl">
            <ListBox ItemsSource="{Binding List, Mode=TwoWay}" DisplayMemberPath="Name"/>
        </ContentControl>
        <Button Click="Button_Click">GC</Button>
    </StackPanel>
</Grid>

Код позади:

public MainWindow()
    {
        InitializeComponent();
        DataContext = new ViewModel();
    }

private void Button_Click(object sender, RoutedEventArgs e)
    {
        this.DataContext = null;
        ContentControl.Content = null;
        GC.Collect();
        GC.WaitForPendingFinalizers();
    }

ViewModel

class ViewModel : INotifyPropertyChanged
{
    //Implementation of INotifyPropertyChanged ...

    //Introducing ObservableCollection as type resolves the problem
    private IEnumerable<Person> _list = 
            new List<Person> { new Person { Name = "one" }, new Person { Name = "two" } };

    public IEnumerable<Person> List
    {
        get { return _list; }
        set
        {
            _list = value;
            RaisePropertyChanged("List");
        }
    }

class Person
{
    public string Name { get; set; }
}

Изменить: Чтобы проверить утечку личности, я использовал ANTS и .Net памяти профилировщик. Оба показывают, что после нажатия кнопки GC только механизм привязки удерживает ссылку на объекты человека.

Ответы на вопрос(2)

Ваш ответ на вопрос