簡體   English   中英

如何使用具有可綁定布局的網格(多於一列)

[英]How to use a Grid with Bindable Layout (more than one column)

在 Xamarin.Forms 3.5 中,Microsoft 向我們介紹了可綁定布局,可用於動態填充布局(例如StackLayoutGrid等)。

在具有單列的網格中使用它非常簡單:

<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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM