Frage

Ich mag einen User Control haben, die eine Sammlung von Menschen (Eigenschaft „Data“) und zeigt sie in einem Listenfeld nimmt. Wenn ich meine App nichts laufen zeigt in der Listbox. Können Sie bitte darauf hinweisen, was mache ich falsch? Dank !!!

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

Benutzerkontrolle: (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}" />
War es hilfreich?

Lösung

Die Itemssource-Eigenschaft steuert die Liste der Elemente, die im Listenfeld angezeigt werden. Wenn Sie die List-Box wollen eine Zeile für jede Person angezeigt werden, müssen Sie die Itemssource setzen direkt an den Datacontext zu binden. Dann nutzen Sie die DisplayMemberPath Eigenschaft zu steuern, welche Eigenschaft der Person-Klasse zu zeigen.

Hier ist mein Beispielcode, der für mich arbeitet. Die Person-Klasse ist das gleiche.

Die 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;
    }
}

Die Window1.xaml

<ListBox ItemsSource="{Binding}" DisplayMemberPath="Name" />
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top