我有一个可枚举的数据源,我想绑定到Xamarin Forms中的某个控件。
我希望布局看起来像 -
ColA | ColB | ColC | ColD
3 4 1 6
15 25 62 26
只是带标题的标准表。
我尝试过ListView,但它不支持标题。我已经尝试了TableLayout,但它不支持绑定到数据源。
我是否遗漏了某些东西,或者我是否应该使用其他控件。
答案 0 :(得分:0)
是的,没有开箱即用的控件,这是一种破解它的方法:
创建一个网格,其中包含一行标题(4列),下一行包含一个包含项目视口的列表视图,然后使用视单元素模板,并在模板中使用包含4列的网格,和4个实验室(每列1个)一样,现在这里的技巧是如何在1个视单元中绑定4个值,我的sugestions有一个像' Something'具有Prop1,Prop2,Prop3,Prop4,现在您将label1绑定到Prop1,将label2绑定到Prop2,所以, 因此,当您创建数据源时,它将类似于:
var list = List<Something>();
list.Add(new Something() { Prop1 = 3, Prop2 = 4, Prop3 = 1, Prop4 = 6});
list.Add(new Something() { Prop1 = 15, Prop2 = 25, Prop3 = 62, Prop4 = 26});
这应该可以实现你所需要的......
答案 1 :(得分:0)
正如其他StackOverflow问题中提到的 Stephane Delcroix : -
&#34; Horizontal ListView Xamarin.Forms&#34;
ListView 本身不支持水平方向,因此您无法使用此功能,因为您理想地希望绑定到 IEnumerable 数据源。
以下帖子中提到了另一种 hack 方法: -
&#34; How to adjust size of Horizontal ListView in Xamarin.Forms?&#34;
建议使用旋转来解决这个问题,尽管在旋转将应用于正常 View 边界之外的情况下,这很可能非常麻烦且有问题,除非它是方形的。
这将允许您使用可绑定数据源但是使用 ListView 的 ItemTemplate 属性并使用其他控件绑定创建 DataTemplate 在其中指定。
然而,对于旋转黑客来说并不理想,我个人甚至不会考虑它。
目前,最好的方法是像Rui提到的那样,创建某种相等的Grid网格并在其中进行格式化。
您还可以使用 StackLayout 为每个子 视图指定特定的 WidthRequest 来实现此目的然后从每个孩子中进行格式化查看。
如果您需要显示的列数超过典型设备屏幕宽度的4列或更多信息,那么您可能需要将 ScrollView 作为父级 网格或 StackLayout ,这样您就可以查看更好的间距,而不是填写所有内容。
作为最后的替代方案 - 您可以编写自己的自定义渲染器以支持具有可绑定数据源的水平ListView。
答案 2 :(得分:0)
<Grid x:Name="dgvEmp">
<Grid.RowDefinitions>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
</Grid.ColumnDefinitions>
</Grid>
List<Employee> lstEmp;
public Gridbasic()
{
InitializeComponent();
lstEmp= new List<Employee>()
{
new Employee()
{
EmpId=1,EmpName="Test1",EmpSalary=12345
},
new Employee()
{
EmpId=2,
EmpName="Test2",
EmpSalary=12345
},
new Employee()
{
EmpId=3,
EmpName="Test3",
EmpSalary=12334
}
};
dgvEmp.Children.Add(new Label() {Text="EmpName" }, 0, 0);
dgvEmp.Children.Add(new Label() { Text = "EmpSal" }, 1, 0);
for(int i=0,j = 1; i <lstEmp.Count; i++)
{
Label lbl = new Label()
{
Text = lstEmp[i].EmpName
};
Label llblEmpSal = new Label()
{
Text = lstEmp[i].EmpSalary.ToString()
};
dgvEmp.Children.Add(lbl, 0, j);
dgvEmp.Children.Add(llblEmpSal, 1, j);
j++;
}
}
&#13;