Теперь я знаю, что свойства не поддерживают async/ждут по уважительным причинам. Но иногда вам нужно запустить некоторую дополнительную фоновую обработку из средства настройки свойств - хорошим примером является привязка данных в сценарии MVVM.Правильный способ вызова методов async из набора свойств привязки данных?
В моем случае у меня есть свойство, связанное с SelectedItem ListView. Разумеется, я сразу же установил новое значение в поле поддержки и выполнил основную работу свойства. Но изменение выбранного элемента в пользовательском интерфейсе также должно инициировать вызов службы REST для получения новых данных на основе выбранного элемента.
Поэтому мне нужно вызвать метод async. Я не могу дождаться этого, очевидно, но я также не хочу запускать и забывать вызов, поскольку я мог бы пропустить исключения во время обработки асинхронных сообщений.
Теперь мои взять следующий:
private Feed selectedFeed;
public Feed SelectedFeed
{
get
{
return this.selectedFeed;
}
set
{
if (this.selectedFeed != value)
{
this.selectedFeed = value;
RaisePropertyChanged();
Task task = GetFeedArticles(value.Id);
task.ContinueWith(t =>
{
if (t.Status != TaskStatus.RanToCompletion)
{
MessengerInstance.Send<string>("Error description", "DisplayErrorNotification");
}
});
}
}
}
ИТАК кроме того, я мог бы выйти манипуляционный из сеттера к синхронному методу, это правильный способ справиться с таким сценарием? Есть ли лучшее, менее захламленное решение, которого я не вижу?
Было бы очень интересно увидеть, как некоторые другие принимают эту проблему. Мне немного любопытно, что мне не удалось найти других обсуждений по этой конкретной теме, поскольку мне кажется очень распространенным я в приложениях MVVM, которые сильно используют привязку данных.
забавная вещь, чтобы быть осторожным здесь обработки, когда изменения свойств в то время как запрос REST находится в стадии разработки. Тем более, что вам не гарантировано, что они будут завершены в том порядке, в котором они были вызваны. –
Да, это правда :), но эта проблема возникла бы независимо от того, использую ли я средство настройки свойств для запуска вызова REST или события или чего-то еще. Мое занятие - отменить все выполняемые запросы, когда выбранный элемент изменяется до отправки нового. –
Вместо этого вы можете приложить команду к событию с измененным изменением, а не проверять, был ли выбранный элемент изменен пользовательским интерфейсом. –