C# WPF 异步事件

问题描述 投票:0回答:0

此 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 的数据与主窗口的数据连接起来?

c# wpf multithreading asynchronous data-binding
© www.soinside.com 2019 - 2024. All rights reserved.