下面是一个示例实现,它使用 Metro API 和数据绑定(使用 MVVM)来填充下拉列表中的文件夹列表。
View 模型的构造函数使用 SetFolders 方法(私有异步),该方法调用可等待的方法 fileService.GetFoldersAsync() 来获取文件夹列表。然后将文件夹列表分配给名为“FoldersList”的属性。XAML 使用此属性来使用数据绑定填充下拉列表。
我想知道有没有更好的方法来设置 FoldersList 属性而不必在构造函数中设置它,如下所示。当实际数据绑定发生时(不是在类初始化期间),我更愿意调用 GetFilesAsync 方法并设置 FilesList 属性值。由于这些属性不支持 async/await 修饰符(据我所知),我正在努力实现一个合适的解决方案。任何想法都非常感谢。
代码如下。
视图模型
public class FileViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private readonly IFileService fileService;
public FileDataViewModel(IFileService fileService)
{
this.fileService = fileService;
SetFolders();
}
private async void SetFolders ()
{
FoldersList = await fileService.GetFoldersAsync();
}
private IEnumerable< IStorageFolder > foldersList;
public IEnumerable<StorageFolder> FoldersList
{
get { return foldersList; }
private set
{
foldersList = value;
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs("FoldersList"));
}
}
}
}
IFileService 和实现
public interface IFileService {
Task<IEnumerable<IStorageFolder>> GetFilesAsync();
}
public class FileService : IFileService
{
public async Task<IEnumerable<IStorageFolder>> GetFoldersAsync()
{
var folder = KnownFolders.DocumentsLibrary;
return await folder.GetFoldersAsync();
}
}