gpt4 book ai didi

c# - WPF 列表框动态填充 - 如何让它刷新?

转载 作者:太空狗 更新时间:2023-10-30 00:17:26 27 4
gpt4 key购买 nike

我是 WPF 的新手,所以我认为这很简单。我有一个带有列表框和按钮的表单。在按钮的单击处理程序中,我迭代地执行一些生成字符串的操作,我想在获取字符串时将其放入列表框中。列表框的 xaml 就像

    <ListBox Height="87" Margin="12,0,12,10" Name="lbxProgress" VerticalAlignment="Bottom">
<ListBox.BindingGroup>
<BindingGroup Name="{x:Null}" NotifyOnValidationError="False" />
</ListBox.BindingGroup>
</ListBox>

点击处理程序就像

private void btn_Click(object sender, RoutedEventArgs e)  
{
List<String> lstrFiles= new List<String>(System.IO.Directory.GetFiles ("C:\\temp", "*.tmp");

foreach(string strFile in lstrFiles)
lbxProgress.Items.Add(strFile);
}

非常简单。由于我的实际操作很长,我希望列表框在每次操作时都更新 - 如何让列表框在每次添加时动态更新?

最佳答案

创建一个 ObservableCollection<string>并将您的 ListBox.ItemsSource 设置为该集合。因为该集合是可观察的,所以 ListBox 将随着其内容的变化而更新。

但是,如果您的实际操作阻塞了 UI 线程,这可能会阻止 WPF 在操作完成之前更新 UI(因为 WPF 数据绑定(bind)基础结构没有机会运行)。因此,您可能需要在后台线程上运行冗长的操作。在这种情况下,由于 WPF 跨线程限制,您将无法从后台线程更新 ObservableCollection(您可以更新属性,但不能更新集合)。要解决此问题,请使用 Dispatcher.BeginInvoke() 在 UI 线程上更新集合,同时在后台线程上继续操作。

关于c# - WPF 列表框动态填充 - 如何让它刷新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1884838/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com