我正在执行文件查询,它返回一个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集合...
只是想知道是否有人有任何魔法可以解决这个问题?或者我是否需要将对象复制并使用它? 干杯
答案 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()));