Xamarin代码后台绑定StackLayout数据及ListView HasUnevenRows失效问题
问题1:ListView HasUnevenRows="true" 不生效解决方案
- 首先排查是否同时给ListView设置了固定
RowHeight属性,该属性会覆盖HasUnevenRows的自动高度计算逻辑,如有请删除固定RowHeight赋值。 - 你当前布局存在冗余的双层Grid嵌套,会影响高度计算效率,可简化布局结构。
- 若绑定的文本为多行内容,需要给Label设置
LineBreakMode="WordWrap",同时不要设置固定HeightRequest或MaxLines属性,保证文本可以撑开布局。
修正后的ListView参考代码:
<ListView x:Name="myCart" HasUnevenRows="true" VerticalOptions="FillAndExpand"> <ListView.ItemTemplate> <DataTemplate> <ViewCell> <Grid Padding="10"> <Label TextColor="#333" Text="{Binding 实际绑定字段}" LineBreakMode="WordWrap" /> </Grid> </ViewCell> </DataTemplate> </ListView.ItemTemplate> </ListView>
如果以上操作后还是无效,可以在给ItemsSource赋值后手动调用myCart.ForceUpdateSize()强制刷新布局。
问题2:StackLayout搭配BindableLayout后台绑定数据源方法
BindableLayout是附加属性,不能直接通过控件实例点出属性赋值,直接调用BindableLayout类的静态SetItemsSource方法即可,实现逻辑非常简单:
var mycartss = Preferences.Get("CartUser", "defaultcart"); var getcartss = JsonConvert.DeserializeObject<List<CartUser>>(mycartss); cartUsers = getcartss; // 绑定数据到StackLayout的BindableLayout BindableLayout.SetItemsSource(stdata, cartUsers);
如果需要在后台动态修改ItemTemplate,也可以用BindableLayout.SetItemTemplate(stdata, 你的DataTemplate实例)方法实现。
内容的提问来源于stack exchange,提问作者Chim Di Tru
相关产品推荐
相关产品推荐

