此 WPF 应用程序需要将数据从 UserControl 中的选择传递回父窗口,以便数据可用于填充其他 UserControl。选择向数据库发出 HTTP 请求,因此它需要是异步的。我当前将数据从子 UserControl 传递到父 Window 的方法是使用触发事件的 RelayCommand。
public RelayCommand<Project> SelectProjectCommand { get; private set; }
public event Action<Project> SelectProjectRequested = delegate { };
public ProjectsViewModel()
{
SelectProjectCommand = new RelayCommand<Project>(SelectProject);
}
private void SelectProject(Project project)
{
SelectProjectRequested(project);
}
主窗口订阅 SelectProjectRequested 事件,当它触发时,执行从数据库获取数据的异步方法。
private async void InitializeSearchView(Project project)
{
if (project != null)
{
await _searchViewModel.GetAllMaterialsForProjectAsync(project);
}
}
public ViewModel()
{
_projectsViewModel.SelectProjectRequested += InitializeSearchView;
}
我正在尝试遵循异步最佳实践,并使其从上到下异步。但是,我不知道如何使事件异步。我可以创建异步 RelayCommand,也可以创建异步方法,但如何将两者与事件连接起来?或者是否有更好的方法以异步方式将 UserControl 的数据与主窗口的数据连接起来?