Question

Je souhaite disposer d'un contrôle utilisateur qui collecte une collection de personnes (propriété "Données") et les affiche dans une zone de liste. Lorsque je lance mon application, rien ne s'affiche dans la liste. Pouvez-vous s'il vous plaît indiquer ce que je fais mal? Merci !!!

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
    public override string ToString()
    {
        return Name + "(" + Age + ")";
    }
}

Contrôle utilisateur: (uc1.xaml.cs)

public partial class uc1
{
    public static readonly DependencyProperty DataProperty = DependencyProperty.Register("Data", typeof (List<Person>), typeof (uc1));

    public List<Person> Data
    {
        get { return (List<Person>) GetValue(DataProperty); }
        set { SetValue(DataProperty, value); }
    }

    public uc1()
    {
        InitializeComponent();
    }

    private void UserControl_Loaded(object sender, RoutedEventArgs e)
    {
        DataContext = Data;
    }
}

(uc1.xaml)

<ListBox ItemsSource="{Binding Name}" />
Était-ce utile?

La solution

La propriété ItemsSource contrôle la liste des éléments affichés dans la liste. Si vous souhaitez que le contrôle ListBox affiche une ligne pour chaque personne, vous devez définir le paramètre ItemsSource pour qu'il se lie directement au DataContext. Vous utilisez ensuite la propriété DisplayMemberPath pour contrôler la propriété de la classe Person à afficher.

Voici mon exemple de code qui fonctionne pour moi. La classe de personnes est la même.

Le Window1.xaml.cs:

public partial class Window1 : Window
{
    public Window1()
    {
        InitializeComponent();
        List<Person> Data = new List<Person>();
        Data.Add(new Person { Name = "Test 1", Age = 5 });
        Data.Add(new Person { Name = "Test 2", Age = 10 });
        this.DataContext = Data;
    }
}

Le Window1.xaml

<ListBox ItemsSource="{Binding}" DisplayMemberPath="Name" />
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top