Иногда шаблон события используется для повышения событий в приложениях MVVM с помощью модели просмотра или дочерней модели для отправки сообщения в родительскую модель просмотра с помощью слабо связанного способа.
Parent ViewModel
searchWidgetViewModel.SearchRequest += (s,e) =>
{
SearchOrders(searchWidgitViewModel.SearchCriteria);
};
SearchWidget ViewModel
public event EventHandler SearchRequest;
SearchCommand = new RelayCommand(() => {
IsSearching = true;
if (SearchRequest != null)
{
SearchRequest(this, EventArgs.Empty);
}
IsSearching = false;
});
При рефакторинге моего приложения для .NET4.5 я делаю так, как можно использовать код async
и await
. Однако следующее не работает (ну, я действительно этого не ожидал)
await SearchRequest(this, EventArgs.Empty);
Фреймворк определенно делает это для вызова обработчиков событий таких как это, но я не уверен, как он это делает?
private async void button1_Click(object sender, RoutedEventArgs e)
{
textBlock1.Text = "Click Started";
await DoWork();
textBlock2.Text = "Click Finished";
}
Все, что я обнаружил в вопросе поднятия событий асинхронно древний, но я не могу найти что-то в этой области, чтобы поддержать это.
Как я могу await
вызвать событие, но оставаться в потоке пользовательского интерфейса.