Отображение членов List <> в ListBox, в WPF с MVVM - PullRequest
0 голосов
/ 31 мая 2019

Я хочу показать некоторые данные из List<> в ListBox без кода позади.

Я пытался использовать привязку через ItemsSource и DisplayMemberPath, но это не работает.

Модель:

public class PersonModel
{
    public string FirstName { get; set; }
    public string LastName { get; set; }

    public string FullName
    {
        get
        {
            return $"{FirstName} + {LastName}";
        }
    }
}

ViewModel:

public class ShellViewModel : Screen
{
    List<PersonModel> people = new List<PersonModel>();

    public ShellViewModel()
    {
        people.Add(new PersonModel { FirstName = "John", LastName = "Snow" });
        people.Add(new PersonModel { FirstName = "Cersei", LastName = "Lannister" });
        people.Add(new PersonModel { FirstName = "Bran", LastName = "Stark" });
    }
}

Просмотр (XAML):

    <Label Grid.Column="1" Grid.Row="1" FontSize="30" FontWeight="Bold" 
           Content="Personal Data:" Margin="10"/>
    <ListBox Grid.Column="1" Grid.ColumnSpan="2" Grid.Row="2" 
             ItemsSource="{Binding people}" DisplayMemberPath="FullName"/>

Где я иду не так?Буду благодарен за ответ.

1 Ответ

3 голосов
/ 31 мая 2019

people должно быть публичной собственностью , чтобы вы могли связываться с ней:

public List<PersonModel> people { get; } = new List<PersonModel>();

Вам также необходимо установить DataContext для ListBox или его родителя Window / UserControl / и т. Д. Для экземпляра ShellViewModel , если только вы не используете какой-то фреймворк, который делает это за вас.

Если вы используете Caliburn.Micro, это должно работать:

<ListBox Grid.Column="1" Grid.ColumnSpan="2" Grid.Row="2" x:Name="people" DisplayMemberPath="FullName"/>

Вы также можете изменить имя свойства на P eople, чтобы справиться с соглашением по именованию C # по умолчанию.

...