我想熟悉Windows應用商店應用程序和MVVM模式(我是這個平臺的新手)。我有一個非常簡單的應用程序,它從json文件中解析Person對象列表,然後在GridView中顯示它們。我創建了一個PeopleViewModel類來充當我的主頁的視圖模型,它處理解析,並公開視圖的對象數組。解析方法:MVVM viewmodel異步數據初始化
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的默認構造函數,我必須調用其init()從我的XAML的代碼隱藏文件的方法:
private async void navigationHelper_LoadState(object sender, LoadStateEventArgs e)
{
PeopleViewModel viewModel = this.DataContext as PeopleViewModel;
await viewModel.init();
}
我的代碼工作很好,但我不知道如果這是正確的方式去做吧。有沒有辦法用異步方法初始化我的視圖模型,並保持我的代碼隱藏文件「乾淨」(或者這個解決方案被認爲是乾淨的)?
你不應該寫async void method沒有預防措施,並且不應該在屬性/構造函數內部進行異步調用,而沒有明確的副作用解釋。 –
夠公平的,我會修改我的評論:) –
太棒了,我刪除了我的downvote。 –