[英]How to use a Grid with Bindable Layout (more than one column)
在 Xamarin.Forms 3.5 中,Microsoft 向我們介紹了可綁定布局,可用於動態填充布局(例如StackLayout
、 Grid
等)。
在具有單列的網格中使用它非常簡單:
<Grid BindableLayout.ItemsSource="{Binding Items}">
<BindableLayout.ItemTemplate>
<DataTemplate>
<Label Text="{Binding MyProperty}"/>
</DataTemplate>
</BindableLayout.ItemTemplate>
</Grid>
現在我的問題是,由於DataTemplate
僅允許將一個視圖作為內容,因此如何使用它來填充具有多列的網格。 當然,我可以在其中添加另一個Grid
,但這會完全抵消Grid
中可綁定布局的值。
現在我的問題是,由於 DataTemplate 僅允許將一個視圖作為內容,因此如何使用它來填充具有多列的網格。
從Bindable Layouts中,我們可以看到:
雖然在技術上可以將可綁定布局附加到派生自 Layout 類的任何布局類,但這樣做並不總是可行的,特別是對於 AbsoluteLayout、Grid 和 RelativeLayout 類。 例如,考慮希望使用可綁定布局在 Grid 中顯示數據集合的場景,其中集合中的每個項目都是包含多個屬性的對象。 Grid 中的每一行都應顯示集合中的一個對象,Grid 中的每一列都顯示該對象的一個屬性。 因為可綁定布局的 DataTemplate 只能包含單個對象,所以該對象必須是包含多個視圖的布局類,每個視圖在特定的 Grid 列中顯示對象的一個屬性。 雖然可以使用可綁定布局來實現此場景,但它會導致父 Grid 包含針對綁定集合中的每個項目的子 Grid,這是對 Grid 布局的一種非常低效且有問題的使用。
如果你還想要更多的列,我建議你可以使用 StackLayout,它也能滿足你的要求。
<StackLayout BindableLayout.ItemsSource="{Binding persons}">
<BindableLayout.ItemTemplate>
<DataTemplate>
<StackLayout Orientation="Horizontal">
<Label Text="{Binding name}" />
<Label Text="{Binding age}" />
</StackLayout>
</DataTemplate>
</BindableLayout.ItemTemplate>
</StackLayout>
檢查這個問題,似乎你試圖完成的事情不能通過使用 Grid 作為元素的 Bindable Layout 來完成。
然而,文檔並不像它應該的那樣清晰。
您可以訂閱 BindingContextChanged 事件並配置所有項目。 您必須在事件發生后以編程方式配置網格定義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.