You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 23:57:04