Xamarin Forms从文本文件填充ListView遇空行问题及方案咨询
问题解决:ListView显示空行+文本文件逐行读取方案
一、ListView空行问题修复
核心问题是绑定属性名拼写不匹配:
- C#模型类定义的属性是
NameOfWojewodschaften - XAML里Label绑定的是
NamWojewodschaften(少了一个字母e)
同时补充两个优化点:
- 无需在foreach循环内重复设置
ItemsSource,循环结束后统一设置一次即可 - 拆分文本时同时处理
\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
相关产品推荐
相关产品推荐

