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

Xamarin Forms从文本文件填充ListView遇空行问题及方案咨询

问题解决:ListView显示空行+文本文件逐行读取方案

一、ListView空行问题修复

核心问题是绑定属性名拼写不匹配:

  • C#模型类定义的属性是NameOfWojewodschaften
  • XAML里Label绑定的是NamWojewodschaften(少了一个字母e)

同时补充两个优化点:

  1. 无需在foreach循环内重复设置ItemsSource,循环结束后统一设置一次即可
  2. 拆分文本时同时处理\r和\n,避免残留换行符导致的空内容

修正后的C#代码

ObservableCollection<Wojewodschaften> listModel = new ObservableCollection<Wojewodschaften>();
private async void LoadWoj()
{
    using (var stream = await FileSystem.OpenAppPackageFileAsync("wojewodschaften.txt"))
    {
        using (var reader = new StreamReader(stream))
        {
            var content = await reader.ReadToEndAsync();
            // 兼容不同系统换行符,过滤空行
            var Wojewodztwa = content.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);
            
            foreach (var item in Wojewodztwa)
            {
                Console.WriteLine(item);
                listModel.Add(new Wojewodschaften()
                {
                    NameOfWojewodschaften = item
                });
            }
            // 循环结束后统一绑定数据源
            ListOfWojewodschaftenList.ItemsSource = listModel;
        }
    }
}

修正后的XAML代码

<ListView x:Name="ListOfWojewodschaftenList">
    <ListView.ItemTemplate>
        <DataTemplate>
            <ViewCell Height="40"> <!-- 适当调高高度,避免文字被截断 -->
                <Label Text="{Binding NameOfWojewodschaften}"
                       TextColor="Black" 
                       FontSize="20"
                       VerticalOptions="Center"
                       HorizontalOptions="Start"/>
            </ViewCell>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

二、逐行读取文本文件的替代方案

除了先读取全部内容再拆分的方式,还可以直接使用StreamReader.ReadLineAsync逐行读取,逻辑更简洁,自动规避换行符处理问题:

private async void LoadWojLineByLine()
{
    using (var stream = await FileSystem.OpenAppPackageFileAsync("wojewodschaften.txt"))
    {
        using (var reader = new StreamReader(stream))
        {
            string line;
            // 逐行读取直到文件结束
            while ((line = await reader.ReadLineAsync()) != null)
            {
                // 跳过空行
                if (!string.IsNullOrWhiteSpace(line))
                {
                    listModel.Add(new Wojewodschaften()
                    {
                        NameOfWojewodschaften = line
                    });
                }
            }
            ListOfWojewodschaftenList.ItemsSource = listModel;
        }
    }
}

内容的提问来源于stack exchange,提问作者Marian34

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 00:24:52