是否可以直接将查询中的文件列表转换为observablecollection

时间:2018-04-12 16:24:21

标签: c# uwp observablecollection

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

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

这很好用,其他地方我正在执行foreach循环,将FileList加载到Observable Collection中。

我觉得我应该能够将查询结果直接加载到这样的可观察集合中:

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

代码编译,但跳过一个异常,说你不能将一个com对象强制转换为Observable集合...

只是想知道是否有人有任何魔法可以解决这个问题?或者我是否需要将对象复制并使用它? 干杯

1 个答案:

答案 0 :(得分:0)

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

但如果使用适当的构造函数重载,则可以使用较短的代码执行此操作:

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()));