Как привязать вложенный класс?

#c# #wpf #xaml #binding

#c# #wpf #xaml #привязка

Вопрос:

Это мой класс:

 public class Person
{
    public string Name { get; set; }
    public string Age { get; set; }
    public List<Sweet> sweetList { get; set; }

    public Person()
    {
        sweetList = new List<Sweet>();
    }
}

public class Sweet
{
    public string Id{ get; set; }
}
  

В MainPage.xaml я установил

 DataContext = personList;
  

в XAML

 <phone:LongListSelector ItemsSource="{Binding personList}" >
 <phone:LongListSelector.ItemTemplate>
      <DataTemplate>
           <TextBlock Text="{Binding Name}" />
           <TextBlock Text="{Binding sweetList.Id}" />
      </DataTemplate>
 </phone:LongListSelector.ItemTemplate>
  

Как я могу привязать этот класс к XAML?
в результате я вижу только Name, но TextBlock с sweetList.Идентификатор пуст
Пожалуйста, помогите

Комментарии:

1. sweetList имеет тип List<Sweet> и List<T> не имеет свойства, вызываемого Id . Вы, вероятно, ищете что-то вроде sweetList[0].Id , хотя это не идеально, поскольку нет гарантии, что sweetList содержит хотя бы 1 элемент, и вы можете захотеть увидеть больше, чем просто первый элемент в списке. Что вы пытаетесь здесь сделать? Вероятно, есть лучшие способы достижения в нем XAML

Ответ №1:

Чтобы отобразить коллекцию в WPF, вам нужно использовать элемент управления контейнером, такой как ListBox :

 <DataTemplate>
    <StackPanel>
        <TextBlock Text="{Binding Name}" />
        <ListBox ItemsSource="{Binding sweetList}">
            <ListBox.ItemTemplate>
                <TextBlock Text="{Binding Id}" />
            </ListBox.ItemTemplate>
    </StackPanel>
</DataTemplate>
  

Затем вам также нужно сообщить фреймворку, как отображать ваш Sweet класс, что и делает внутренний ListBox.ItemTemplate .

Ответ №2:

Вы устанавливаете шаблон элемента для каждого элемента в ‘PersonList’, но вы не делаете то же самое для ‘sweetList’.

Поскольку sweetList — это список, а не просто один Sweet, вам либо нужно получить доступ к первому в списке, выполнив что-то вроде sweetList[0].Идентификатор, или, возможно, вы хотите отобразить каждый из списка на экране, и в этом случае вам нужно сделать что-то похожее на то, что вы делаете с PersonList.

Комментарии:

1. Нужен список в виде: ссылка конечно, классный класс только с одним свойством — это только пример. У всех пользователей есть список с конфетами. Я должен показать всех людей и все плюсы, которые у них есть.