c# - WPF ListBox 不显示项目(一项一项)
问题描述
我有一长串单词。我检查单词出现了多少次,然后将其添加到 ObservableCollection。由于它是一个长列表并且迭代需要相当长的时间,我希望能够显示该单词每次迭代后继续下一次。目前,在整个集合的迭代完成后,单词将一起显示。
调试时,我注意到当我向 oWords 添加一个值但未显示该值时,列表框(wordBox)已更新。
Exercise4_btn.Click += async (object sender, RoutedEventArgs e) =>
{
oWords = new ObservableCollection<Word>();
List<string> words = await GetWordsFromFile();
wordBox.DataContext = oWords;
wordBox.SetBinding(ListBox.ItemsSourceProperty, new Binding());
foreach (var word in words)
{
await Task.Run(() =>
{
int count = words.Where(w => w.Equals(word)).Count();
try
{
oWords.Add(new Word {Value = word, Count = count});
}
catch { }
});
}
};
这是列表框在 xaml 中的外观
<ListBox Name="wordBox" HorizontalAlignment="Left" Height="612" Margin="460,53,0,0" VerticalAlignment="Top" Width="278"/>
这是 ObservableCollection 使用的类
public class Word
{
public string Value { get; set; }
public int Count { get; set; }
public override string ToString()
{
return ($"{Value}\t{Count}");
}
}
解决方案
Coops 提供的评论中的链接对我有用 使用 WPF Dispatcher 和 TPL 更新 UI
我还发现了另一个类似的解决方案异步添加到 ObservableCollection
推荐阅读
- node.js - 无法读取未定义的 node.js 文件系统的属性“toString”
- react-native - 在 React-Native 中,当将 appcenter 与 i18n 一起使用时,重复的 react-native 错误
- php - laravel 5.6 - 连接被拒绝
- css - Bootstrap 3,媒体查询清除:左
- ubuntu-18.04 - 如何对未在 ubuntu 中运行的程序进行故障排除
- python - 使用 cx_Freeze 将 grpc python 代码制作为 exe:没有名为“pkg_resources”的模块
- javascript - react-native - 如何使用 FlatList 创建多个开关?
- django - 在 Django 中显示图像
- hive - 使用 pyspark 展平 Hive 结构列或 avro 文件
- lambda - sam local start-api 无法导入模块