【发布时间】:2017-09-11 10:22:59
【问题描述】:
我正在尝试实施在部门工作的员工列表。一个部门有几个部门和几个员工。以下是我的代码,我难以滚动和包装内容(员工图像和姓名)。至于包装内容,如果一行没有足够的空间,我希望内容(图像和员工的名字)显示在新的一行中。
到目前为止,我尝试了多种选择,但都无济于事。我正在使用ItemsControl 我还尝试添加StackLayout 而不是WrapLayout。
谁能告诉我如何解决滚动问题和内容换行问题?我可以使用任何解决方法或任何其他布局吗?谢谢。
XAML
<ListView ItemsSource="{Binding Departments}" HasUnevenRows="True">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout Margin="20,20,20,20">
<Label Text="{Binding DepartmentName}" />
<Label Text="{Binding DepartmentId}" />
<local:ItemsControl ItemsSource="{Binding Employees}">
<local:ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<local:WrapLayout>
<Image Source="{Binding ImageUrl}"
WidthRequest="60"
HeightRequest="60"/>
<Label
Text="{Binding FirstName}"
HorizontalTextAlignment="Center"
VerticalTextAlignment="Center"
LineBreakMode="WordWrap"/>
</local:WrapLayout>
</Grid>
</DataTemplate>
</local:ItemsControl.ItemTemplate>
</local:ItemsControl>
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
更新 1:
类
Department.cs
public class Department
{
public int DepartmentID { get; set; }
public string DepartmentName { get; set; }
// and several other properties
public List<Employee> Employees { get; set; }
}
Employee.cs
public class Employee
{
public int EmployeeID { get; set; }
public string FirstName { get; set; }
public string ImageUrl{ get; set; }
// and several other properties
}
更新 2
似乎滚动不会仅在我的一个测试设备中发生。但仍然需要一个能够包装控件的布局。
更新 3
我希望数据如下图所示。但是现在,使用上面的代码,WrapLayout 中的内容没有被包装,而是被调整大小以适合一行。如果第一行没有空格,我希望它们被包装起来。
【问题讨论】:
-
ItemsControl是一种ListView组件吗?您不能在滚动视图中使用嵌套列表视图或列表视图,反之亦然。好像你需要一个分组的列表视图。同样的问题见this answer
-
@DiegoRafaelSouza
ItemsControl实际上是 this。我之前使用了嵌套的ListView(没有ScrollView),但它没有正确显示数据,当然它效率不高,从我在大多数帖子中看到的。我尝试了您提到的上述链接。但是我的课有点不同。我已经更新了我的问题。如果可以的话,请看一下。谢谢。 -
@DiegoRafaelSouza 谢谢你的链接。我尝试过这个。然而,它不符合我的主要目的。 :( 这是包装内容。在这种情况下,网格不是动态的(因为这是一个集合)。我希望能够不提及行和列索引。:(你能帮我吗:(
-
好的,我去看看
标签: xaml mvvm xamarin.forms itemscontrol