如何将集合绑定到WPF中的ListView

我有一个程序在目录中搜索符合特定条件的文件。 这个搜索过程需要长时间,所以我必须异步调用它。 当搜索算法找到文件时,它会触发一个事件。 我的MainWindow实例侦听此事件,需要更新GUI。 如何将这些“添加”文件绑定到ListView ? 我想我可以使用ObservableCollection实例,但我无法弄清楚如何绑定它。

我已经删除了所有不相关的控件和代码。 这是两个相关的文件。

MainWindow.xaml:

             

MainWindow.xaml.cs:

 using System.IO; using System.Threading.Tasks; public partial class MainWindow { private SearchLogic _backgroundSearch; private async void Search(object sender, RoutedEventArgs e) { // TODO: clear Results _backgroundSearch = new SearchLogic("", new DirectoryInfo("C:\")); _backgroundSearch.FileAdded += FileAdded; await Task.Run(new Action(_backgroundSearch.Search)); } private void FileAdded(object sender, FileAddedEventArgs eventArgs) { // TODO: add eventArgs.File to Results // eventArgs.File is an instance of FileInfo } } 

这是一个简单的例子

你的XAML

                 

你的守则背后

 public partial class MainWindow : Window { public class FileInfo { public string Name { get; set; } public DateTime LastModified { get; set; } public FileInfo(string name) { Name = name; LastModified = DateTime.Now; } } ObservableCollection mFileNames = new ObservableCollection(); public ObservableCollection FileNames { get { return mFileNames; } } public MainWindow() { DataContext = this; InitializeComponent(); } private void Window_Loaded(object sender, RoutedEventArgs e) { ThreadPool.QueueUserWorkItem((x) => { while (true) { Dispatcher.BeginInvoke((Action)(() => { mFileNames.Add(new FileInfo("X")); })); Thread.Sleep(500); } }); } } 

如果您运行此问题,您会注意到列表框每半秒更新一次新项目。 基本上要注意的关键是ObservableCollection只能从UI线程更新,所以如果你重构上面的代码,你需要以某种方式使用当前UI线程的Dispatcher来更新它