【发布时间】:2020-01-16 15:11:23
【问题描述】:
我有一个按钮,点击它将处理所有文件。我想在运行时显示进度。因此,如果文件 1 正在处理,则 UI 显示
“处理文件1”
;处理文件 2 时,UI 显示
“处理文件1”
“处理文件2”
所以我使用 Listbox 来完成。 ListBox 的 ItemSource 是我的 ViewModel 中的一个集合
private ObservableCollection<string> _displayedFiles;
public ObservableCollection<string> DisplayedFiles
{
get {return _displayedFiles;}
set
{
_displayedFiles = value;
PropertyChanged(nameof(DisplayedFiles));
}
}
现在 ViewModel 被传递给命令类
public class MyCommand :ICommand
{
private MyViewModel myViewModel;
public MyCommand(MyViewModel myViewModel)
{
this.myViewModel = myViewModel;
}
public void Execute(object parameter)
{
foreach(var f in files)
{
Application.Current.Dispatcher.Invoke(DispatcherPriority.Normal, (ThreadStart)delegate () { AddFiles(f);});
}
}
private void AddFiles(string f)
{
this.ViewModel.DisplayedFiles.Add(f);
}
}
但是我发现 UI 卡住了,列表没有一一显示。循环迭代完成后,它会一起显示整个列表。
【问题讨论】: