2014-08-27 83 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