是否可以将查询中的文件列表直接转换为可观察集合

Is it possible to directly cast a file list from a query to an observablecollection

我正在执行一个文件查询,它 returns 一个 IReadOnlyList。

        public IReadOnlyList<StorageFile> FileList;
        FileList =   await queryResult.GetFilesAsync();

这工作正常,我在其他地方执行 foreach 循环以将 FileList 加载到 Observable 集合中。

令我震惊的是,我应该能够像这样将查询结果直接加载到可观察集合中:

        public ReadOnlyObservableCollection<StorageFile> FileList;
        FileList =  (ReadOnlyObservableCollection<StorageFile>) await queryResult.GetFilesAsync();

代码可以编译,但会引发异常,提示您不能将 com 对象转换到 Observable 集合中...

只是想知道是否有人可以解决这个问题?还是我只需要复制对象并使用它? 干杯

GetFilesAsync()(返回的任务)返回的对象只是不是一个ReadOnlyObservableCollection<StorageFile>,所以你不能直接转换它,你必须复制元素。

但是如果您使用适当的构造函数重载,您可以使用更短的代码来做到这一点:

var observableCollection = new ObservableCollection<StorageFile>((await queryResult.GetFilesAsync()).ToList());

This constructor of ObservableCollection<T>List<T> 作为参数并复制元素。

如果你需要一个 ReadOnlyObservableCollection 它会变得有点混乱,因为 constructor of ReadOnlyObservableCollection<T> 需要一个 ObservableCollection<T> 作为参数,所以你必须这样做:

var rooc = new ReadOnlyObservableCollection<StorageFile>(
                new ObservableCollection<StorageFile>(
                  (await queryResult.GetFilesAsync()).ToList()));