Асинхронная загрузка образцов данных Blendable в MVVM Light в конструкторе модели представления
У меня есть проект Windows Phone 8.1 MVVM Light иЯ изо всех сил стараюсь сделать это смешанным.
На мой взгляд, у меня есть несколько вариантов. Я могу загрузить различные модели просмотра в зависимости от того,ViewModelBase.IsInDesignModeStatic
верно вViewModelLocator
конструктор, или я могу проверитьViewModelBase.IsInDesignModeStatic
в конструкторе модели представления и загрузите данные соответственно.
ЕслиViewModelBase.IsInDesignModeStatic
Это правда, мне нужно загрузить данные из файла. Вот мой код:
public async Task<ThingsSampleDataSource> GetSampleDataAsync()
{
if (_DeserializedThingsSampleDataSource == null)
{
var dataUri = new Uri(_SampleDataJSONFile);
var file = await StorageFile.GetFileFromApplicationUriAsync(dataUri);
var jsonText = await FileIO.ReadTextAsync(file);
_DeserializedThingsSampleDataSource = JsonConvert.DeserializeObject<ThingsSampleDataSource>(jsonText);
}
return _DeserializedThingsSampleDataSource;
}
Когда я вызываю этот метод, мне нужно пометить вызовawait
и, таким образом, вызывающий методasync
, Но конструкторы не могут быть отмеченыasync
.
Или я могу предоставить продолжение ContinueWith вместо ожидания возврата асинхронного кода. Но Blend загружает страницу до завершения ContinueWith.
Учитывая, что образец данных загружается в модель представления или службу локатораконструкторы и он должен загружать данные из файла, асинхронное действие, как мне сделать это в MVVM Light, чтобы образцы данных были доступны в Blend?
(N.B. другие ответы, которые я нашел, например,этот, не используйте MVVM Light.)