2014-08-27 49 views
1

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

我想要的布局看起来像 -

ColA | ColB | ColC | ColD 
    3  4  1  6 
15  25  62 26 

只是一个标准的表头。

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

我是否遗漏了一些东西,或者是否有其他一些我应该使用的控件。

+0

您也可以渲染的电力网,如果你的行数是比较低与绑定标签填充行(N <10?),否则性能将是一个问题 – 2014-08-28 16:57:05

+0

TableLayout可以被绑定,但不是以这种方式绑定的,它不能用于这个目的。下面的Grid建议是您最好的选择,或HTML和WebView。 – 2014-10-23 02:12:08

回答

0

呀世界上没有控制了它的方块,这里是一个一个破解它的方法:

创建具有一排你的头(4列)的网格,下一行有一个列表视图你的项目的视图单元,然后你使用视单元模板,并在你的模板中,你有4列和4实验室(每列1)的网格就像头,现在的技巧是你将如何绑定4个值1 viewcell,我的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}); 

这应该做到你需要什么..

0

由于斯特凡DELCROIX这个StackOverflow的其他问题中提及: -

Horizontal ListView Xamarin.Forms

的ListView没有原生支持水平方向,所以你不能使用这个,因为你的理想情况是想要绑定到一个数据源的IEnumerable

有一个在下面的文章中提到的另一个黑客方法: -

How to adjust size of Horizontal ListView in Xamarin.Forms?

是建议使用旋转来解决这个问题,尽管这将很可能是相当麻烦并且在轮换将应用于正常范围之外的情况下存在问题,除非它是方形维度。

这将允许您使用的ListView的ItemTemplate财产和创建的DataTemplate在其指定的其他控制绑定使用,无论您绑定的数据源。

然而,这是不理想的旋转黑客,我个人甚至不会考虑它。

目前,最好的方法就是按照Rui的说法,创建一些相同列的网格并进行格式化。

你也可以用StackLayout指定特定WidthRequest每个孩子查看 S的实现这一点,然后从每个孩子查看内做你的格式。

如果您需要显示超过4列,或大于将适合在一个典型的设备屏幕宽度的更多信息,那么你可以把它放到一个滚动型作为父的这个电网StackLayout,所以你可以使用更好的间距查看所有内容,而不是将所有东西都放入其中。

作为最后的选择 - 您可以编写自己的自定义渲染器来支持带有可绑定数据源的水平ListView。

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++; 
 
      } 
 

 
     }

+0

给它添加一些描述。 – piyushj 2016-11-05 07:17:57