首页 > 解决方案 > 如何将嵌套的可观察集合值绑定到列表视图

问题描述

我想在列表视图中显示所有学生姓名。我已经完成了如下操作。但它显示了一个空的列表视图。

 public  class ClassRoomDetailsList
{
    public int ClassRoomID { get; set; }
    public ObservableCollection<StudentsList> StudentsArray { get; set; }
}

public class StudentsList
{
    public string StudentName{ get; set; }

}


public static ObservableCollection<ClassRoomDetailsList> _ClassRoomDetailsList = new ObservableCollection<ClassRoomDetailsList>();
//assigned values to observable collection here
list1.ItemsSource = AppGlobals._ClassRoomDetailsList;

 <ListView x:Name="list1" HorizontalAlignment="Right"  Height="500" Width="500"  Background="Violet" >
           <ListView.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Vertical">
                     <Border Background="#b9fbc9" VerticalAlignment="Center">
                     <TextBlock Text="{Binding  StudentName}" FontSize="30" HorizontalAlignment="Center" VerticalAlignment="Center"    Foreground="Black"/>
                     </Border>
                     </StackPanel>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>

我已检查 _ClassRoomDetailsList 是否正确包含学生姓名。是的。那么空列表视图的问题是什么?

标签: listviewuwpobservablecollection

解决方案


_ClassRoomDetailsList是一个对象,其ObservableCollection<ClassRoomDetailsList>子项是ClassRoomDetailsList对象,但是您的 ListView 想要绑定StudentsList对象的StudentName,所以您ListView.ItemsSource应该是一个 ObservableCollection<StudentsList>对象。

您在 ListView 的 DataTemplate 中的绑定应该在 ObservableCollection< T >中绑定T类对象的属性。这是一个基于您的模型的简单示例。

public MainPage()
{
    this.InitializeComponent();
    ObservableCollection<StudentsList> studentsLists = new ObservableCollection<StudentsList>();
    studentsLists.Add(new StudentsList() { StudentName = "first student" });
    studentsLists.Add(new StudentsList() { StudentName = "second student" });
    studentsLists.Add(new StudentsList() { StudentName = "third student" });
    studentsLists.Add(new StudentsList() { StudentName = "fourth student" });
    studentsLists.Add(new StudentsList() { StudentName = "fifth student" });

    _ClassRoomDetailsList.StudentsArray = studentsLists;

    //assigned values to observable collection here
    list1.ItemsSource = _ClassRoomDetailsList.StudentsArray;
}
public ClassRoomDetailsList _ClassRoomDetailsList = new ClassRoomDetailsList();

有关 uwp 应用程序中的绑定的更多详细信息,请参阅主题数据绑定概述


推荐阅读