Xamarin.forms 以Xamarin形式绑定数据

Xamarin.forms 以Xamarin形式绑定数据,xamarin.forms,Xamarin.forms,我有一个可枚举的数据源,我想绑定到Xamarin表单中的某个控件 我希望布局看起来像这样- ColA | ColB | ColC | ColD 3 4 1 6 15 25 62 26 只是一个有标题的标准表格 我尝试了ListView,但它不支持标题。我尝试过TableLayout,但它不支持绑定到数据源 <Grid x:Name="dgvEmp"> <Grid.RowDefinitions> &

我有一个可枚举的数据源,我想绑定到Xamarin表单中的某个控件

我希望布局看起来像这样-

ColA | ColB | ColC | ColD
  3      4      1     6
 15     25     62    26
只是一个有标题的标准表格

我尝试了ListView,但它不支持标题。我尝试过TableLayout,但它不支持绑定到数据源

<Grid x:Name="dgvEmp">
    <Grid.RowDefinitions>

    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>

    </Grid.ColumnDefinitions>
 </Grid>

我是否错过了一些东西,或者我应该使用其他控件。

是的,它没有现成的控件,这里有一种破解方法:

创建一个网格,其中有一行作为标题(4列),下一行有一个listview,其中有一个viewcell作为项目,然后使用viewcell模板,在模板中有一个网格,其中有4列和4个标签(每列1个),就像标题一样,现在的技巧是如何在1个viewcell中绑定4个值,我的建议是有一个类似“某物”的对象,它有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});
var list=list();
Add(newsomething(){Prop1=3,Prop2=4,Prop3=1,Prop4=6});
Add(newsomething(){Prop1=15,Prop2=25,Prop3=62,Prop4=26});
这应该能满足你的需要

正如Stephane Delcroix在另一个问题中提到的:-

“”

ListView本机不支持水平方向,因此您不能使用它,因为您的理想情况是希望绑定到IEnumerable数据源

<Grid x:Name="dgvEmp">
    <Grid.RowDefinitions>

    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>

    </Grid.ColumnDefinitions>
 </Grid>
下面的帖子中提到了另一种黑客方法:-

“”

这建议使用旋转来解决这个问题,尽管这很可能会非常麻烦,并且在一些情况下会出现问题,因为旋转将应用于正常视图边界之外,除非它是正方形尺寸

但是,这将允许您使用可绑定数据源,方法是使用ListViewItemTemplate属性,并使用其中指定的其他控件绑定创建DataTemplate

<> P.>对于旋转攻克,它并不理想,而我个人甚至不考虑它。 目前,最好的方法是按照Rui所提到的那样,创建一种由相等列组成的网格,并在其中进行格式化

您还可以通过为每个子视图指定一个特定的宽度请求来实现这一点,然后在每个子视图中进行格式化

如果您需要显示超过4列或超过典型设备屏幕宽度的信息,那么您可能希望将滚动视图作为该网格或堆栈布局的父级,这样您就可以以更好的间距查看所有内容,而不是将所有内容塞入其中

作为最后一种选择,您可以编写自己的自定义呈现程序,以支持具有可绑定数据源的水平ListView。


<Grid x:Name="dgvEmp">
    <Grid.RowDefinitions>

    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>

    </Grid.ColumnDefinitions>
 </Grid>
列出lstEmp;
公共网格基础()
{
初始化组件();
lstEmp=新列表()
{
新雇员()
{
EmpId=1,EmpName=“Test1”,EmpSalary=12345
},
新雇员()
{
EmpId=2,
EmpName=“Test2”,
EMPALARY=12345
},
新雇员()
{
EmpId=3,
EmpName=“Test3”,
EMPALARY=12334
}
};
添加(新标签(){Text=“EmpName”},0,0);
添加(新标签(){Text=“EmpSal”},1,0);

对于(int i=0,j=1;i),如果行数相对较低,您也可以使用网格渲染,并使用绑定的标签填充行(TableLayout可以绑定,但不能以这种方式绑定,因此无法实现此目的。下面的网格建议是您的最佳选择,或者HTML和WebView。请添加一些说明。