Вопрос

Я хочу иметь пользовательский элемент управления, который принимает набор людей (свойство "Данные") и отображает их в виде списка.Когда я запускаю свое приложение, в списке ничего не отображается.Не могли бы вы, пожалуйста, указать, что я делаю не так?Спасибо!!!

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

Пользовательский контроль:(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}" />
Это было полезно?

Решение

Свойство ItemsSource управляет списком элементов, которые отображаются в listbox.Если вы хотите, чтобы в ListBox отображалась одна строка для каждого пользователя, вам нужно настроить ItemsSource на привязку непосредственно к DataContext.Затем вы используете свойство DisplayMemberPath, чтобы указать, какое свойство класса Person отображать.

Вот мой пример кода, который работает у меня.Класс person тот же самый.

Окно 1.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;
    }
}

Окно 1.xaml

<ListBox ItemsSource="{Binding}" DisplayMemberPath="Name" />
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top