猿问

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

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


        public IReadOnlyList<StorageFile> FileList;

        FileList =   await queryResult.GetFilesAsync();

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


令我惊讶的是,我应该能够将查询结果直接加载到可观察的集合中,如下所示:


        public ReadOnlyObservableCollection<StorageFile> FileList;

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

代码可以编译,但是会触发一个异常,表明您无法将com对象转换为Observable集合...


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


慕斯709654
浏览 187回答 1
1回答

偶然的你

通过返回的对象(任务返回的)GetFilesAsync()根本就不是一个ReadOnlyObservableCollection<StorageFile>,所以你不能直接投它,你必须复制的元素。但是,如果使用适当的构造函数重载,则可以使用较短的代码来实现:var observableCollection = new ObservableCollection<StorageFile>((await queryResult.GetFilesAsync()).ToList());的构造函数ObservableCollection<T>采用List<T>as作为参数并复制元素。如果您需要a,ReadOnlyObservableCollection那么它的构造器ReadOnlyObservableCollection<T>将使用ObservableCollection<T>as参数,因此会有些混乱,因此您必须执行以下操作:var rooc = new ReadOnlyObservableCollection<StorageFile>(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; new ObservableCollection<StorageFile>(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (await queryResult.GetFilesAsync()).ToList()));
随时随地看视频慕课网APP
我要回答