是否可以将查询中的文件列表直接转换为可观察集合
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()));
我正在执行一个文件查询,它 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()));