Когда свойство меняет свое значение, я хочу вызвать асинхронный метод, который извлекает данные из веб-службы, а затем обновляет другое свойство, к которому привязан пользовательский интерфейс, вызывая обновление пользовательского интерфейса. Для меня имеет смысл, что обновление является асинхронным, поскольку я хочу, чтобы пользовательский интерфейс оставался отзывчивым во время обновления.
Неправильно ли вызывать асинхронный метод из не асинхронного установщика? Я заметил, что если асинхронный метод возвращает void, VS не жалуется, но если он возвращает Task, то Visual Studio жалуется, что вызов не ожидается. Мой код выглядит так:
public int Property1
{
set
{
_property1 = value;
NotityPropertyChanged();
UpdateData();
}
}
private async void UpdateData()
{
// show data loading message
var data = await GetDataFromWebService();
Property2 = data;
// hide data loading message
}
Кажется, это работает, но мне интересно, не использую ли я асинхронный режим, как это было задумано, с учетом предупреждения, которое я получаю от VS, если тип возвращаемого значения - Task.
ОБНОВЛЕНИЕ: в нескольких ответах и комментариях предлагается использовать команды вместо обновления в ответ на изменение свойства. В моем случае я не уверен, как это можно применить, поэтому предоставляю более подробную информацию о том, как ожидается, что пользовательский интерфейс будет работать.
В пользовательском интерфейсе есть средство выбора даты (которое привязано к рассматриваемому свойству в модели представления), где пользователь выбирает дату, для которой он хочет просмотреть записи. Когда пользователь выбирает новую дату, приложение должно показывать индикатор занятости, а затем извлекать записи в фоновом режиме, чтобы избежать блокировки потока пользовательского интерфейса. Желательно, чтобы обновление запускалось при выбранной дате, не требуя, чтобы пользователь нажимал кнопку после выбора даты.
Было бы лучше связать событие SelectionChanged средства выбора даты и асинхронную команду в ViewModel или альтернативно иметь обработчик синхронизации для SelectionChanged, который напрямую вызывает метод обновления для модели представления?