Ne pouvez pas obtenir WPF ListView à se lier à ObservableCollection

J'ai été jouer avec WPF pour la première fois, plus précisément à l'aide d'une ListView que je veux lier à une ObservableCollection qui est une propriété sur la page code-behind. Droit maintenant, je suis juste essayer d'obtenir une idée de comment les choses fonctionnent donc j'ai essayé de garder ce simple. Malheureusement, je n'arrive pas à voir où je vais mal avec cette.

Ma page code-behind a une propriété qui ressemble à ceci:

public ObservableCollection<Code> Code { get; set; }

J'ai un bouton sur le formulaire que les requêtes et remplit le Code de la propriété.

Le Code de la classe est une simple classe POCO:

public class Code
{
   public string Line { get; set; }
}

J'ai ajouté un espace de noms pour le code XAML de la fenêtre:

<Window x:Class="SampleWPF.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"       
        xmlns:local="clr-namespace:SampleWPF" 
        Title="MainWindow" Height="350" Width="525"                
        >

Et la liste ressemble à ceci:

<DockPanel Height="311" HorizontalAlignment="Left" Name="dockPanel1" 
           VerticalAlignment="Top" Width="182">
    <ListView Name="lstCode"                        
              ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=Window, AncestorLevel=1}, Path=Code}"
              DisplayMemberPath="Line">

        <ListView.View>
            <GridView>
                <GridViewColumn DisplayMemberBinding="{Binding Line}" />
            </GridView>
        </ListView.View>
    </ListView>
</DockPanel>

J'ai aussi essayé de mettre le DataContext dans le code-behind de constructeur, avec pas de chance, ex.:

this.DataContext = this;

EDIT: Déplacement de cette ligne après la ligne de code qui crée la collecte des éléments fixes (ainsi que les autres modifications proposées).

Et j'ai aussi essayé de définir explicitement la ItemsSource dans le code (dans mon gestionnaire de clic):

this.lstCode.ItemsSource = this.Code;

J'ai regardé un certain nombre d'exemples, mais je suis toujours en manque de quelque chose ici (pas vraiment une surprise).

OriginalL'auteur Paul | 2011-02-03