C# 事件x:绑定到异步任务方法可以吗?

C# 事件x:绑定到异步任务方法可以吗?,c#,xaml,asynchronous,mvvm,uwp,C#,Xaml,Asynchronous,Mvvm,Uwp,我想知道使用x:bind将事件绑定到异步任务方法是一种好的做法吗 基本上,我使用的是MVVM,我的ViewModel中包含一些异步任务方法,我想将异步任务方法绑定到我视图中的一个事件,这实际上很好,但是,我听说我们不应该将一个事件转换成异步任务 下面是一些代码示例: 事件x:绑定到异步任务方法 SomeViewModel.cs SomeView.xaml 如果您遵循MVVM模式,那么最好避免事件,而是使用命令 我没有编译代码,所以它可能不是100%准确,但这是我的想法 <Button Co

我想知道使用x:bind将事件绑定到异步任务方法是一种好的做法吗

基本上,我使用的是MVVM,我的ViewModel中包含一些异步任务方法,我想将异步任务方法绑定到我视图中的一个事件,这实际上很好,但是,我听说我们不应该将一个事件转换成异步任务

下面是一些代码示例: 事件x:绑定到异步任务方法

SomeViewModel.cs

SomeView.xaml


如果您遵循MVVM模式,那么最好避免事件,而是使用命令

我没有编译代码,所以它可能不是100%准确,但这是我的想法

<Button Context="Click" Command="ButtonClickedCommand" />
在MVVM构造函数中,需要将其初始化为方法

ButtonClickedCommand = new DelegateCommand(ButtonClicked);
现在你的方法。这应该是异步的

public async void ButtonClicked()
{
    // Your code here.
}
为什么您的代码应该是异步的

您的UI方法应该是异步的,以避免冻结UI和中断用户

为什么我的async是一个异步void而不是一个异步任务


异步任务将强制代码等待代码。async void将调用任务,但不知道任务何时完成。因为这是与UI相关的,我们不想听到它的回音。

据我所知,您必须绑定到void方法,不管是否异步。为什么要使用x:bind而不是命令?这是异步void,没关系。用户界面事件处理程序不必使用异步任务。@JustinXL:用户界面事件处理程序不必使用异步任务-更具体地说,用户界面事件处理程序不能使用异步任务。某些引用:。
public async void Done_clicked(...)
{
    await vm.DoneAsync();
}
<Button Context="Click" Command="ButtonClickedCommand" />
DelegateCommand ButtonClickedCommand
ButtonClickedCommand = new DelegateCommand(ButtonClicked);
public async void ButtonClicked()
{
    // Your code here.
}