【发布时间】:2014-04-08 09:02:08
【问题描述】:
我正在尝试熟悉 Windows 应用商店应用程序和 MVVM 模式(我是这个平台的新手)。我有一个非常简单的应用程序,它从 json 文件中解析 Person 对象列表,然后在 gridView 中显示它们。我创建了一个 PeopleViewModel 类作为我的主页的视图模型,它处理解析,并为视图公开对象数组。解析方式:
public async Task init()
{
StorageFolder resourceFolder = Windows.ApplicationModel.Package.Current.InstalledLocation;
resourceFolder = await resourceFolder.GetFolderAsync("Resources");
StorageFile resourceFile = await resourceFolder.GetFileAsync("persons.json");
string fileContent = await Windows.Storage.FileIO.ReadTextAsync(resourceFile);
ObservableCollection<Person> persons = new ObservableCollection<Person>();
JsonValue json = JsonValue.Parse(fileContent);
int personCount = json.GetArray().Count;
for (int i = 0; i < personCount; i++)
{
IJsonValue element = json.GetArray()[i];
Person p = new Person(element);
persons.Add(p);
}
_persons = persons;
}
然后在我的 XAML 中,我将这个类设置为页面的数据上下文:
<!-- viewModel namespace defined above -->
<Page.DataContext>
<viewModel:PeopleViewModel/>
</Page.DataContext>
由于读取文件是异步操作,我不能把它放在 PeopleViewModel 的默认构造函数中,我必须从我的 xaml 的代码隐藏文件中调用它的 init() 方法:
private async void navigationHelper_LoadState(object sender, LoadStateEventArgs e)
{
PeopleViewModel viewModel = this.DataContext as PeopleViewModel;
await viewModel.init();
}
我的代码运行良好,但我想知道这是否是正确的方法。有没有办法用异步方法初始化我的视图模型,并保持我的代码隐藏文件“干净”(或者这个解决方案被认为是干净的)?
【问题讨论】:
标签: c# .net mvvm windows-store-apps